Skip to content

GmSSL SM2/3/4 Android Jni 数字信封 数字签名 Java arm64 armv7a GBT-35275

License

Notifications You must be signed in to change notification settings

Cocoon-break/GmSSL-android

Repository files navigation

GmSSL-android

GmSSL Android下实现。实现SM2/SM3/SM4对数据加密。如果该仓库对你有帮助的话,欢迎start

Quick Start

  1. 使用module 添加到自己的工程中。

    git clone https://github.com/Cocoon-break/GmSSL-android
    cd GmSSL-android

    将gmlib添加到自己工程中作为依赖module。该方式需要NDK,因为底层是由JNI实现。

  2. 直接使用release 中的aar包。

    直接从release中下载aar包,添加到自己工程中。最小支持Android SDK minSdkVersion 21

具体的API使用参考MainActivity.java,同时MainActivity.java中也包含了对GBT 35275 数字信封格式的使用,具体使用直接看代码即可。

注:PKCS7 标准的中数字信封使用OID,是国际标准的。本工程中使用的是中国标准的,所以修改了GmSSL 表示OID中的源码编译的。修改方法直接粗暴的把OBJ_pkcs7_enveloped 的国际标准修改成中国标准的。

Developers

如果你想从零开始封装GmSSL

  1. 编译armv7和arm64使用的libssl.a和libcrypto.a。

    编译环境和编译脚本参考more

  2. JNI封装

    本工程使用JNI是使用的动态注册的方式实现。在我的RegisterJni工程中可参考学习。

Other

本来数字信封和数字签名流程写在more中但是github的markdown不支持mermaid,我就手动截图一份

  1. 数字信封流程

    GBT-35275 标准数字信封格式,具体使用参考MainActivity.java

    Server 生成非对称密钥的公钥和私钥:asymmetric_pub_key & asymmetric_pri_key

    1.jpg

    1. Client 使用generateRandom(16),生成对称密钥。symmetric_key
    2. Client 使用symmetricEncrypt()和对称密钥,对明文进行加密。src_symmetric_en
    3. Client 使用publicKeyEncrypt()和Server的公钥,加密对称密钥。symmetric_key_en
    4. Client 将加密后的密文和加密后的对称密钥提供给Server端。
    5. Server使用publicKeyDecrypt()和Server的私钥,解密得道对称密钥。symmetric_key
    6. Server使用symmetricDecrypt()和对称密钥,解密密文得到明文。src

    2.jpg

  2. 数字签名流程

    Server 生成非对称密钥的公钥和私钥:asymmetric_pub_key & asymmetric_pri_key

    3.jpg

    1. Client 使用digest(),对src 计算摘要。digest_src
    2. Client 使用sign()和Server公钥,对digest_src进行签名。digest_src_sign
    3. Client 将digest_src_sign 和 src 发送给Server
    4. Server 使用verify() 对digest_src_sign 和 digest_src进行验签。

    4.jpg

License

the Apache 2.0 license

About

GmSSL SM2/3/4 Android Jni 数字信封 数字签名 Java arm64 armv7a GBT-35275

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages