sm4
2012年3月,国家密码管理局正式公布了包含SM4分组密码算法在内的《祖冲之序列密码算法》等6项密码行业标准。与DES和AES算法类似,SM4算法是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。SM4算法加/解密算法的结构相同,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。SM4算法的整体结构如图所示:
SM4算法结构图:
2. 参数产生
字节由8位2进制数表示,字由32位2进制数表示;
S盒为固定的8bit输入和输出置换;
加密密钥长度为128bit,表示为MK=(MK0,MK1,MK2,MK3),其中MKi (i=0,1,2,3)为字。轮密钥表示为rki(i=0,1,2.....,31)为字。FK=(FK0,FK1,FK2,FK3)为系统参数,CK=(CK0,CK1,.....,CK31)为固定参数,都为字。
3. 轮函数
整体的加密函数为:
其中T为一个合成置换,由非线性变换和线性变换复合而成。
非线性变换由4个平行的S盒构成,S盒的数据均采用16进制。
线性变换公式如下,其中B为非线性变换得到的字
4. 密钥扩展
已知加密密钥MK=(MK0,MK1,MK2,MK3),系统参数FK=(FK0,FK1,FK2,FK3),固定参数CK=(CK0,CK1,.....,CK31).
rki为轮密钥,轮密钥由加密密钥生成。
首先,
然后对i=0,1,2,...,31:
改变换与加密中的T变换基本相同,只是将其中的线性变换改为:,由于系统参数个固定参数是已知的,轮密钥即可求得。
5. 加密/解密过程祖冲之序列密码
加密最后一轮变换时,输出为:
最后输出是加密的反序,解密时只是将轮密钥的使用顺序进行逆向进行。
————————————————
版权声明:本文为CSDN博主「10点43」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cg129054036/java/article/details/83016958
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)