卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

定義結構體一定要用typedef嗎 typedef定義結構體的用法?

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

typedef定義結構體的用法?

Typedef struct {}結構名稱;

示例:typedefstruct { } null struct

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

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

有用過國密算法SM4的嗎?

算法調用參數(shù)。算法需要一個結構sm4_context ctx來存儲上下文信息,即加密和每個輪的密鑰。

該結構定義如下

typedef結構

{

int模式

/*!lt加密/解密*/

無符號長sk[32]

/*!lt SM4子項*/

} sm4 _上下文

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

靜態(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]

對于(ilt32 i ) {

k[I]k[I]^

SK[i] k[i 4]

}

}

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

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

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

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

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

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

靜態(tài)無符號長整型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)對密碼本模式下輸入的密文進行加密。加密的核心是調用加密每個密文:靜態(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