sm4算法加密解密

一、基本知识

  1. 分组加密(英语:Block cipher),又称分块加密或块密码,是一种对称**算法。它将明文分成多个等长的模块(block),使用确定的算法和对称**对每组分别加密解密。
  2. 对称加密、加密算法主要可以分为两种,一个是非对称加密算法,另一个就是对称加密算法。对称加密简单来说就是有一个明文,通过一个**加密之后得到一个密文,这个密文可以通过相同的密要解密得出和原来相同的明文

二、sm4算法

  1. 算法定义:SM4算法是一种分组密码算法。其分组长度为128bit,**长度也为128bit。加密算法与**扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。SM4算法加/解密算法的结构相同,只是使用轮**相反,其中解密轮**是加密轮**的逆序。
  2. 基本运算     

       ⊕  异或

      <<<i  循环左移i位

     3.算法实现

sm4算法加密解密

即首先执行32次轮函数迭代运算,然后在对最后一轮数据反序变换并得到密文输出

三、步骤详解

1.轮函数F

 

sm4算法加密解密

示意图

sm4算法加密解密

SM4的轮函数将输入部分看做了4个32bit长度的数据,每轮的后3个部分都向左移动32bit的数据长度,这三组数据异或后进入非线性部分τ和线性部分L,运算后的结果与第一组数据异或置于最右面。如此循环往复32轮,也就是数据一共左移了8个周期,将其中的混乱因素不断扩散至每个bit位中

2.T函数

sm4算法加密解密

s盒如下:

sm4算法加密解密

使用规则:sm4算法加密解密

3.秘钥扩展算法

sm4算法加密解密

系统参数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

六、总结

本篇博客为查看参考文献中的相关文档学习总结所得,有错误的地方大家多多指教