sm4算法加密解密
一、基本知识
- 分组加密(英语:Block cipher),又称分块加密或块密码,是一种对称**算法。它将明文分成多个等长的模块(block),使用确定的算法和对称**对每组分别加密解密。
- 对称加密、加密算法主要可以分为两种,一个是非对称加密算法,另一个就是对称加密算法。对称加密简单来说就是有一个明文,通过一个**加密之后得到一个密文,这个密文可以通过相同的密要解密得出和原来相同的明文
二、sm4算法
- 算法定义:SM4算法是一种分组密码算法。其分组长度为128bit,**长度也为128bit。加密算法与**扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。SM4算法加/解密算法的结构相同,只是使用轮**相反,其中解密轮**是加密轮**的逆序。
- 基本运算
⊕ 异或
<<<i 循环左移i位
3.算法实现
即首先执行32次轮函数迭代运算,然后在对最后一轮数据反序变换并得到密文输出
三、步骤详解
1.轮函数F
示意图
SM4的轮函数将输入部分看做了4个32bit长度的数据,每轮的后3个部分都向左移动32bit的数据长度,这三组数据异或后进入非线性部分τ和线性部分L,运算后的结果与第一组数据异或置于最右面。如此循环往复32轮,也就是数据一共左移了8个周期,将其中的混乱因素不断扩散至每个bit位中
2.T函数
s盒如下:
使用规则:
3.秘钥扩展算法
系统参数FK的取值
FK0=(A3B1BAC6),FK1=(56AA3350),FK2=(677D9197),FK3=(B27022DC)
固定参数CK的取值
00070e15, 1c232a31, 383f464d, 545b6269,
70777e85, 8c939aa1, a8afb6bd, c4cbd2d9,
e0e7eef5, fc030a11, 181f262d, 343b4249,
50575e65, 6c737a81, 888f969d, a4abb2b9,
c0c7ced5, dce3eaf1, f8ff060d, 141b2229,
30373e45, 4c535a61, 686f767d, 848b9299,
a0a7aeb5, bcc3cad1, d8dfe6ed, f4fb0209,
10171e25, 2c333a41, 484f565d, 646b7279
四、java代码实现
五、参考文献
SM4分组密码算法:https://wenku.baidu.com/view/e66938055acfa1c7aa00cca7.html?from=search
SM4分组密码算法综述:https://wenku.baidu.com/view/5c900609001ca300a6c30c22590102020640f252.html?fr=search
SM4算法及实现方式:http://www.mamicode.com/info-detail-2603734.html
SM4加密解密:https://blog.****.net/Mr_ye931/article/details/105680359
六、总结
本篇博客为查看参考文献中的相关文档学习总结所得,有错误的地方大家多多指教