前言
最近做的项目对安全性要求比较高,特别强调:系统不能涉及MD5、SHA1、RSA1024、DES高风险算法。
那用什么嘞?甲方:建议用国产密码算法SM4。
擅长敏捷开发(CV大法)的我,先去GitHub找了开源项目、又去网络上找了一些教程,但是或多或少都有些问题:
- 比如
golang.org/x/crypto/sm4
无法安装编译 - 比如C站烂大街的SM4教程,不能解决数据填充的问题,超过16位就解密失败了
- 比如如何封装成通用的方法,供系统进行调用
- 更多就是复制粘贴了SM4的定义,很抽象。
于是我花了2天时间研究SM4的原理和应用,解决了上面这些问题,整理这篇文章分享给大家,让大家能少踩坑。
我会按照下面的顺序分享这篇文章,方便大家更好的理解,如果你就是喜欢拿来主义(敏捷开发),可以直接copy底部的示例代码,快速上手使用即可。
文章目录
- SM4的优势
- IV是什么?
- SM4加密的方式和原理
- SM4的各种工作模式对比
- 直接可用的「代码示例」
- 核心方法的源码解析
- 总结回顾
1. SM4的优势
相比于其他加密算法,SM4加密算法具有以下几个优势:
-
高安全性:SM4是一种对称加密算法,采用128位密钥长度,具有较高的安全性和抗攻击性。它经过了广泛的安全性分析和评估,并通过了多个密码学标准的验证。
-
高效性:SM4算法的加密和解密速度较快,适用于对大量数据进行加密和解密的场景。它在硬件和软件实现上都具有高效性能。
-
简单性:SM4算法的实现相对简单,代码量较小,易于理解和使用。它的设计目标之一是提供一种易于实现和部署的加密算法。
-
标准化:SM4算法是中国国家密码管理局发布的密码算法标准,得到了广泛的应用和认可。它已成为国际上公认的密码算法之一。
-
广泛支持:SM4算法在各种平台和编程语言中都有支持和实现,包括Go、Java、C/C++等。它可以在不同的系统和环境中进行跨平台的应用和部署。
-
可扩展性:SM4算法支持不同的工作模式和填充方式,可以根据具体需求进行灵活配置。它可以与其他密码算法结合使用,提供更高级别的安全保护。
小小的总结一下:SM4加密算法在安全性、高效性、简单性、标准化和广泛支持等方面具有优势,适用于各种数据保护和加密应用场景。它是一种可靠的加密算法选择。
2.IV是什么?
我在学习的时候看到IV就蒙了,所以有必要先说清楚IV的概念:
Initialization Vector(IV)是一种在密码学中使用的初始值。它是一个固定长度的随机数或者随机生成的值,用于在加密算法中初始化密码算法的状态。
在加密过程中,IV的作用是引入随机性和唯一性,以增加加密的安全性。 它与