国密算法(二)

本文详细介绍了国密算法中的SM4和SM7。SM4是一种用于无线局域网产品的128位对称加密算法,采用32轮非线性迭代结构,而SM7适用于非接触式IC卡,同样具有128位分组和密钥长度。文章阐述了两种算法的加密原理、轮函数、密钥扩展过程以及加密解密流程。
摘要由CSDN通过智能技术生成

接上文:https://blog.csdn.net/qq_33375026/article/details/104634299

SM4

SM4对称算法是一个分组算法,用于无线局域网产品。该算法的分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。此算法采用非线性迭代结构,每次迭代由一个轮函数给出,其中轮函数由一个非线性变换和线性变换复合而成,非线性变换由S盒所给出。其中rki为轮密钥,合成置换T组成轮函数。

算法原理

128bit的明文被分为4个32bit的字,记成X0,X1,X2,X3。密文也分为4个字,记成Y0,Y1,Y2,Y3,这些明文会经过32轮的迭代加密。
在这里插入图片描述
常量:

var cK = [32]uint32{
   
	0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269,
	0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9,
	0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249,
	0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9,
	0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229,
	0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299,
	0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209,
	0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279,
}

var fK = [4]uint32{
   
	0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc,
}

轮函数:
整体的加密函数为:
在这里插入图片描述
其中T为一个合成置换,由非线性变换和线性变换复合而成。
•非线性变换由4个平行的S盒构成,S盒的数据均采用16进制。
•线性变换公式如下,其中B为非线性变换得到的字
在这里插入图片描述

func processBlock(rk []uint32, in []byte, out []byte) {
   
	var x [BlockSize / 4]uint32
	x[0] = binary.BigEndian.Uint32(in[0:4])
	x[1] = binary.BigEndian.Uint32(in[4:8])
	x[2] = binary.BigEndian.Uint32(in[8:12])
	x[3] = binary.BigEndian.Uint32(in[12:16])

	for i := 0; i < 32; i += 4 {
   
		x[0] 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值