# 背景

工作中针对接口信息安全这块使用过很多算法,从小白的MD5、SHA256、Hmac,到RSA1024、RSA2048,再到现在的国密算法,都是在不断的打怪升级,然后沉淀。目前生产用的就是国密SM2加签,为此也调研研究过很多的库:

openssl
miracl
gmssl
mbedTLS
bouncycastle
1
2
3
4
5

这些都是我封装过,用于生产的库,目前是移动端(openssl or mbedTLS)实现,后端Java(bouncycastle)实现搭配使用,因为封装SDK供第三方使用的时候,其它APP可能也用了openssl之类的,就会有冲突,就得openssl或者mbedTLS换着来。

# Why

为什么要从零开始实现国密算法,有以下几点原因吧

  1. 将这些年使用国密算法的经验进行总结
  2. 将国密算法转换为自己完全掌控的
  3. 第三方库太复杂了,云里雾里的感觉很不好
  4. 第三方库编译太麻烦了,库文件还比较大
  5. 第三方库优化没有方向

# 参考及Copy

本文大部分代码都Copy自gmssl-v3-dev,相当于是自己照着写了一遍,非常感谢gmssl的作者。

openssl: https://github.com/openssl/openssl (opens new window)

gmssl-v3-dev: https://github.com/guanzhi/gmssl-v3-dev (opens new window)

# 关于源代码

源代码仓库地址如下

ikantech/gm (opens new window)