定义结构体一定要用typedef吗 typedef定义结构体的用法?
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
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。