关于国密算法SM4的流程
原来用于无线局域网的国密算法SMS4被定义为SM4作为密码行业标准发布。SM4是一个分组对称密钥算法,明文、密钥、密文都是16字节,加密和解密密钥相同。通过32次循环的非线性迭代轮函数来实现加密和解密。其中包括非线性变换S盒,以及由移位异或构成的线性变换。除了256字节的S盒之外,还定义了另外两组参数FK以及CK(具体数据参考密码局网站)。基本过程是首先把16字节密钥按照4字节一组分成4组,然后根据密钥扩展算法,生成32组4字节轮密钥;再把输入的16字节数据也按照4字节一组分成4组然后进行循环运算(这点和AES算法类似)。以下是一个简单的加密demo流程。(特别说明:本程序未经编译验证,仅供理解SM4流程参考)
U32 CK[32] = {}; // CK参数
U32 FK[4] = {}; // FK参数
U8 Sbox[256] = {}; // S盒数据
U32 K[35];
U32 X[35];
U8 Key[16]={}; // 密钥
U8 Input[16]={}; // 输入明文
U8 Output[16]; // 输出密文
U32 rk[32];
typedef union
{