一、概述
SM4是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”
SM4主要用于数据加密,为非对称加密,其算法公开,分组长度与密钥长度均为128bit,加密算法与密钥扩展算法都采用32轮非线性迭代结构,S盒为固定的8比特输入8比特输出。
SM4无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。
sm4非常节省资源,8051完全没有问题!
完整源码下载地址 :https://download.youkuaiyun.com/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;