2016 - 2024

感恩一路有你

定义结构体一定要用typedef吗 typedef定义结构体的用法?

浏览量:2417 时间:2023-06-16 10:46:14 作者:采采

typedef定义结构体的用法?

Typedef struct {}结构名称;

示例:typedefstruct { } null struct

C语言中typedefstruct和struct区别?

例如:typedefstructabc { intxintyintz} ABC当结构的abc类型重命名为ABC,后面定义了同类型的变量时,可以写成:ABCm,n;和:structabcm,n;效果是一样的。复杂的数据类型可以简化。

有用过国密算法SM4的吗?

算法调用参数。算法需要一个结构sm4_context ctx来存储上下文信息,即加密和每个轮的密钥。

该结构定义如下

typedef结构

{

int模式

/*!lt加密/解密*/

无符号长sk[32]

/*!lt SM4子项*/

} sm4 _上下文

加密密钥调度算法首先调用sm4_setkey_enc(ampctx,key)设置密钥,这个函数会设置模式为加密,调用static void sm4 _ setkey(unsigned long sk[32],unsigned charkey [16])完成密钥设置操作。

静态void sm4_setkey(

unsigned long SK[32],unsigned char key[16]){ unsigned long MK[4]unsigned long k[36]unsigned long I 0 get _ ulong _ be(MK[0],key,0 ) GET_ULONG_BE( MK[1],key,4 ) GET_ULONG_BE( MK[2],key,8 ) GET_ULONG_BE( MK[3],key,12)k[0]mk[0]^fk[0]k[1]mk[1]^fk[1]k[2]mk[2]^fk[2]k[3]mk[3]^fk[3]

对于(ilt32 i ) {

k[I]k[I]^

SK[i] k[i 4]

}

}

与加密中的操作类似,首先通过宏将初始密钥转换成四个32位整数MK0、MK1和MK。2,MK3,并且预先准备初始值用于计算每一轮密钥,其中FK阵列是系统参数。

mk[0]^fk[0 mk[1]^fk[1]

mk[2]^fk[2 mk[3]^fk[3]

此后,对于I轮密钥SK[i],通过XOR k[i]和复数变换T 的K的K的K的CK的:SK的

其中CK为固定参数,虽然代码中直接给出了CK,但实际上有一定的计算方法:设CKij为CKi的第j个字节,即CKi(cki0,cki1,cki2,cki3),则ckij(4i j)*7(mod 256)。

函数sm4CalciRK,即变换T ,与加密轮函数中的t基本相同,先进行Sbox的非线性代入,再进行线性变换,只是线性变换L改为:rkbb (rotl (bb,13)) (rotl (bb,23))。

静态无符号长整型sm4CalciRK(无符号长整型ka)

{

unsigned long bb 0 unsigned long rk 0 unsigned char a[4]unsigned char b[4]put _ ulong _ be(ka,a,0)b[0]sm4sbox(a[0])b[1]sm4sbox(a[1])b[2]sm4sbox(a[2])b[3]sm4sbox(a[3])get _ ulong _ be(bb,b,0) rk bb^(ROTL(bb,13))^(ROTL(bb,23))返回rk

}

加密过程通过调用Void sm4 _ crypt _ ECB(sm4 _ context * CTX,int mode,int length,unsigned char * input,unsigned char * output)对密码本模式下输入的密文进行加密。加密的核心是调用加密每个密文:静态void sm4 _ one _ round(unsigned long sk[32],unsigned char input [16],unsigned char output[16]);

静电void sm4_one_round(

unsigned long sk[32]、unsigned char input[16]、unsigned char output[16]){ unsigned long I 0 unsigned long ul buf[36]memset(ul buf,0,sizeof(ul buf))get _ ulong _ be(ul buf[0],input,0 ) GET_ULONG_BE( ulbuf[1],input,4 ) GET_ULONG_BE( ulbuf[2],input,8 ) GET_ULONG_BE( ulbuf[3],input,12 ) while(ilt32

结构 加密 模式 静态

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。