当前位置:首页 >资讯 >聊聊SM4算法源码接口


SM4算法是我国的分组密码算法。该算法的分组长度为128比特,密钥长度为128比特。加密算法和密钥扩展算法均采用32轮非线性迭代结构。解密算法的结构与加密算法相同,只是轮键的使用顺序相反,而解密轮键是加密轮键的逆序。

分组密码算法是什么:

国际DES、国产SM4分组密码算法

分组密码是指在同一密钥控制下,将明文数据按固定长度分组,然后逐个分组加密,从而将每个明文分组转换为长度相等的密码分组的密码。二进制明文分组的长度称为分组密码的分组规模。

SM4算法整体结构图如下

以下几个函数存在于SM4算法的源代码中:

SM4算法源代码接口详解。

还有一个很重要的结构体:

SM4算法源代码接口详解。

结构体

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加密算法来解密我们的数据,而无需了解内部的具体实现,这非常方便。