国密SM4的C51源码C语言8051(ECB、CBC)

一、概述

SM4是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”

SM4主要用于数据加密,为非对称加密,其算法公开,分组长度与密钥长度均为128bit,加密算法与密钥扩展算法都采用32轮非线性迭代结构,S盒为固定的8比特输入8比特输出。

SM4无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

sm4非常节省资源,8051完全没有问题!

 

完整源码下载地址 :https://download.csdn.net/download/guoggn/18548821

二、流程

1、非线性变换t

      查表Sbox替换

2、线性变换L

     循环左移

3、32次轮迭代交换

4、反序变换

三、秘钥扩展

  秘钥128位扩展为256字节,方法同加密类似。

   

四、ECB和CBC

ECB(Electronic Code Book)/电码本模式,16字节一分组,组和组之间没有关系,组内容相同加密结果相同。

CBC(Cipher Block Chaining)/密文分组链接方式,首组用到IV,后一组用到前一组的输出,内容相同的组加密结果不同。

五、代码

/*
* sm4.c
* 此算法适用于C51的8位机
* C51为大端模式
* 输入数据长度不限,必须是16字节的倍数。
* 若是16字节倍数,需要先补齐到16字节倍数,
* SM3对输入数据分块取HASH,每消息块长度最大限定为64字节,
*/

// SMS4的密钥扩展算法
// 参数说明:Key为加密密钥,rk为扩展后密钥
void SMS4KeyExt(u8 *key, u32 *rk)
{
	int i = 0; 
	u32 k[36] = { 0 };     //用于密钥扩展算法与系统参数FK运算后的结果存储
	u32 *pMK = (u32 *)key;	
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 国密算法M4使用的是CBC(Cipher Block Chaining)模式,而不是ECB(Electronic Codebook)模式。 CBC模式是一种基于块加密的模式,它将明文分成固定大小的数据块,并使用前一个块的密文作为当前块的输入。每个数据块都会进行加密和解密处理,且密文依赖于前一个数据块的加密结果,增加了加密的随机性和安全性。 相比之下,ECB是最基本的块密码模式,它将明文分成固定大小的数据块,每个数据块都会独立地进行加密处理。这意味着相同的明文块会得到相同的密文块,这种重复性可能带来安全问题。 因为ECB模式没有使用前一个数据块的密文作为输入,所以它比较简单但不够安全。而CBC模式通过引入初始向量(Initialization Vector)和每个数据块间的依赖性,提高了加密的安全性和随机性。 综上所述,国密算法M4使用的是CBC模式,通过引入初始向量和密文依赖性,提高了加密的安全性。 ### 回答2: 国密算法SM4使用的是CBC(Cipher Block Chaining)模式,而不是ECB(Electronic Codebook)模式。CBC模式是一种分组密码模式,其中每个明文块与前一个密文块进行异或运算后再与密钥进行加密。这种链式加密的方式可以增加数据的安全性,因为同样的明文块在不同的加密过程中会生成不同的密文块。这样即使攻击者知道原始明文和部分密文,也难以获得其他密文块的信息。相对而言,ECB模式则将每个明文块独立进行加密,容易受到攻击者的分析和重放攻击。因此,国密算法SM4采用了更加安全的CBC模式来保护数据的机密性。 ### 回答3: 国密算法SM4使用的是CBC(Cipher Block Chaining,密码块链)模式,不使用ECB(Electronic Codebook,电子密码本)模式。CBC模式需要一个初始向量(IV)作为第一个块的输入,并且每个块的输入都取决于前一个块的输出与当前块的明文之间的异或操作。这样做可以增加密码的安全性,因为同样的明文块在不同的加密过程中会产生不同的密文块。 与此不同的是,ECB模式将整个明文分为固定大小的块,然后每个块都独立加密。这意味着相同的明文块将始终生成相同的密文块,这可能会使密码易受到攻击,尤其是在明文模式重复且明显的情况下。 国密SM4算法的选择使用CBC模式,是为了提高密码的安全性和抵抗一些攻击方式。通过CBC模式,国密SM4算法能够更好地保护数据安全,并且在各种应用场景中都有广泛的适用性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值