OpenSSL 1.1.1 国密SM2 SM3 SM4 SM9 ZUC EEA3 EIA3 SM2 +SM3签名 源码 Demo 下载 OpenSSL iOS端库下载
最近因为需要研究国密,所以寻找加密库,demo就很重要了,这里记录下。
直接进入正文,附上OpenSSL GitHub官网的下载地址,最新的已经支持国密了。
https://github.com/openssl/openssl
进入GitHub 下载OpenSSL demo,你会发现移动端 安卓,iOS的库呢?What F ?
网上找了很多,最新的基本没有。基本需要自己编译OpenSSL,这个过程很痛苦,你可以试试!
最后我用了一个大神的脚本,胜利解决打包成libcrypto.a libssl.a 文件,支持armv7,arm64,armv7s,i386,x86_64,附上大神GitHub链接
https://github.com/x2on/OpenSSL-for-iPhone
这里还有个插曲,以前用过支付宝里的OpenSSL,来进行RSA签名,验证签名,加解密。最近下了SDK发现最新的阿里支付SDK没找到SM2文件。于是又断了一条路。(其实OpenSSL提供一些编译指令,可以摒弃一些无用的算法,比如no sm2.这样减少libssl,libcrypto包大小)
库有了,查看SM2,SM3,SM4 加密OpenSSL的代码,发现很好很强大
/*
SM2 signature generation. Assumes input is an SM3 digest
*/
int SM2_sign(int type, const unsigned char *dgst, int dgstlen,
unsigned char *sig, unsigned int *siglen, EC_KEY *eckey);
/*
*SM2 signature verification. Assumes input is an SM3 digest
*/
int SM2_verify(int type, const unsigned char *dgst, int dgstlen,
const unsigned char *sig, int siglen, EC_KEY *eckey);
int SM2_encrypt(const EC_KEY *key,
const EVP_MD *digest,
const uint8_t *msg,
size_t msg_len,
uint8_t *ciphertext_buf, size_t *ciphertext_len);
int SM2_decrypt(const EC_KEY *key,
const EVP_MD *digest,
const uint8_t *ciphertext,
size_t ciphertext_len, uint8_t *ptext_buf, size_t *ptext_len);
每个参数没有备注,就问你怕不怕。API的话,你可以去
https://www.feistyduck.com/library/openssl-cookbook/
没账号的话,需要注册登录。注册腾讯邮箱可以,新浪邮箱半天都没收到确认链接。然后可以下载,或者在线查看相关英文Api。然后呢发现没有SM2 Api的(可能我方法有误,你可以找找,目前还在摸着石头过河中)。
看到这里你可能纳闷,OpenSSL的SM9国密算法呢,不好意思还没有。所以采用GMSSL的SM9来代替。但是这个库编译armv7,arm64,armv7s,i386,x86_64架构也有一序列问题。
这里是官网http://gmssl.org。一直维护更新在。
然后issue的话你可以看GMSSL的git官网问题,目前遇到卡住问题就在issue里的。
https://github.com/guanzhi/GmSSL这是GMSSL的github链接