成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

定義結(jié)構(gòu)體一定要用typedef嗎 typedef定義結(jié)構(gòu)體的用法?

typedef定義結(jié)構(gòu)體的用法?Typedef struct {}結(jié)構(gòu)名稱;示例:typedefstruct { } null structC語言中typedefstruct和struct區(qū)別?例如:

typedef定義結(jié)構(gòu)體的用法?

Typedef struct {}結(jié)構(gòu)名稱;

示例:typedefstruct { } null struct

C語言中typedefstruct和struct區(qū)別?

例如:typedefstructabc { intxintyintz} ABC當(dāng)結(jié)構(gòu)的abc類型重命名為ABC,后面定義了同類型的變量時(shí),可以寫成:ABCm,n;和:structabcm,n;效果是一樣的。復(fù)雜的數(shù)據(jù)類型可以簡(jiǎn)化。

有用過國密算法SM4的嗎?

算法調(diào)用參數(shù)。算法需要一個(gè)結(jié)構(gòu)sm4_context ctx來存儲(chǔ)上下文信息,即加密和每個(gè)輪的密鑰。

該結(jié)構(gòu)定義如下

typedef結(jié)構(gòu)

{

int模式

/*!lt加密/解密*/

無符號(hào)長sk[32]

/*!lt SM4子項(xiàng)*/

} sm4 _上下文

加密密鑰調(diào)度算法首先調(diào)用sm4_setkey_enc(ampctx,key)設(shè)置密鑰,這個(gè)函數(shù)會(huì)設(shè)置模式為加密,調(diào)用static void sm4 _ setkey(unsigned long sk[32],unsigned charkey [16])完成密鑰設(shè)置操作。

靜態(tài)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]

對(duì)于(ilt32 i ) {

k[I]k[I]^

SK[i] k[i 4]

}

}

與加密中的操作類似,首先通過宏將初始密鑰轉(zhuǎn)換成四個(gè)32位整數(shù)MK0、MK1和MK。2,MK3,并且預(yù)先準(zhǔn)備初始值用于計(jì)算每一輪密鑰,其中FK陣列是系統(tǒng)參數(shù)。

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

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

此后,對(duì)于I輪密鑰SK[i],通過XOR k[i]和復(fù)數(shù)變換T 的K的K的K的CK的:SK的

其中CK為固定參數(shù),雖然代碼中直接給出了CK,但實(shí)際上有一定的計(jì)算方法:設(shè)CKij為CKi的第j個(gè)字節(jié),即CKi(cki0,cki1,cki2,cki3),則ckij(4i j)*7(mod 256)。

函數(shù)sm4CalciRK,即變換T ,與加密輪函數(shù)中的t基本相同,先進(jìn)行Sbox的非線性代入,再進(jìn)行線性變換,只是線性變換L改為:rkbb (rotl (bb,13)) (rotl (bb,23))。

靜態(tài)無符號(hào)長整型sm4CalciRK(無符號(hào)長整型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

}

加密過程通過調(diào)用Void sm4 _ crypt _ ECB(sm4 _ context * CTX,int mode,int length,unsigned char * input,unsigned char * output)對(duì)密碼本模式下輸入的密文進(jìn)行加密。加密的核心是調(diào)用加密每個(gè)密文:靜態(tài)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