Git Product home page Git Product logo

sm4's Introduction

概述

这是国产加密算法 SM4 的实现,这个加密算法是在开源项目OpenSSL中获取到的,从安全性和可信程度上有一定的保障

目录结构解释

├── README.md
├── build_libs.sh (可以用文本编辑器打开看下,里面不过ndk是编译命令的集合而已)
├── clean.sh (用于清除编译后产生的文件,比如sm4.so 等)
├── libsm4   (sm4加密核心工程)
│   └── jni
│       ├── Android.mk(编译生成动态库,libsm4.so)
│       ├── Application.mk
│       ├── e_os2.h(由于代码来自OpenSSL,这个东西是里面的一些基本宏定义,可以和下面的sm4.h 进行合并)
│       ├── sm4.c (主要实现sm4的加解密算法)
│       └── sm4.h  (相对于OpenSSL的源码进行了些修改,使其能够导出方法)
├── main    (测试工程)
│   └── jni
│       ├── Android.mk(编译生成可执行文件,并且链接上面生成的动态库)
│       ├── Application.mk(指定生成不同CPU架构的库)
│       └── sm4test.c  (用来调用上面生成的动态库,然后加解密一个字节数组)
└── run.sh (用于把编译生成的测试文件(sm4的动态库和可执行文件),推送到手机,并且在手机环境中运行)

环境配置

需要下载安装NDK 来编译这个工程 这不废话吗

  • 本工程在开发和调试中使用的 NDK 版本是 r17。ndk的环境变量的配置可以参考这篇文章

  • 配置adb环境变量

  • 测试机:使用的是华为p9,Android 7.0

  • 开发环境:Mac os ,jdk 8 ,ndk 17

如果测试机的CPU架构不一样,需要修改Application.mk文件里面的APP_ABI的值,同时还要修改辅助脚本里面和测试工程的Android.mk文件里面的动态库的路径。

编译

为了减少操作命令行的次数,增加了以下三个shell脚本来辅助编译和测试。

  • 编译动态库 (libsm4.so 和其他的用于测试的可执行文件)
./build_libs.sh
  • 把编译生成的动态库和可执行文件,通过adb push到手机的环境中运行
./run.sh
  • 清除动态库
./clean_libs.sh

结束语

其实上面这么编译纯粹是为了演示先编译出动态库,再调用动态库的这个流程。除此之外还可以:

  1. 直接把sm4.c,和sm4test.c 一起编译生成一个可执行文件,把这个可执行文件复制到手机,就能直接运行了,不用复制动态库到手机了
  2. 把上面的生成动态库的过程,生成静态库,然后在main这个项目中引用静态库,这样编译出来的东西也只有一个文件,直接复制到手机,就能运行

编译的方式很多也很灵活,就看你想怎么在Android中使用编译好库。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.