分组密码算法是什么:
国际DES、国产SM4分组密码算法。
分组密码是指在同一密钥控制下,将明文数据按固定长度分组,然后逐个分组加密,从而将每个明文分组转换为长度相等的密码分组的密码。二进制明文分组的长度称为分组密码的分组规模。
SM4算法整体结构图如下:
以下几个函数存在于SM4算法的源代码中:
![SM4算法源代码接口详解。](imgs/2021/03/330-1.png)
还有一个很重要的结构体:
![SM4算法源代码接口详解。](imgs/2021/03/330-2.png)
结构体:
Mode控制在sm4_context结构体中是加密还是解密,sk表示子钥匙,也称为轮钥匙。
第一个函数:voidsm4_setkey_enc(sm4_contex*ctx,unsignedcharkey[16]
一个参数分别是sm4_contexx*ctx和一个key,用于设置加密密钥。
它的内部会调用staticvoidsm4_setkey(unsignedlongSK[32],unsignedcharky[16])函数。
该函数用于设置密钥。该函数将在32轮中迭代当前传入的主密钥,并在CTX结构中的SK数组中存储每轮迭代密钥。
解密函数为voidsm4_setey_dec(sm4_contex*ctx,unsignedcharkey[16])函数为上述过程的逆序过程。
第二个函数:voidsm4_crypt_ecb(sm4_contexx*ctx,intmode,intlength,unsignedchar。
这个函数的作用是用ECB模式(ECB,电码本)模式作为分组密码最基本的工作方式。同样的,sm4_crypt_cbbc函数用的是CBC模式,也就是分组链接模式)作内容加密,内部也是循环,按照length的长度作循环,每个循环调用sm4_one_round进行加密或解密,到底是加密还是解密,主要根据第二参数mode来决定。
以上是整个SM4算法的函数介绍。通过使用这些函数接口,我们可以使用SM4加密算法来解密我们的数据,而无需了解内部的具体实现,这非常方便。