aes:advanced encryption standard,高階加密標準。
在密碼學上又稱:rijndael加密法。
rijndael輪函式是由3個不同的可逆均勻變換組成
aes常見3種方案:
功能:通過s盒完成1個位元組到另1個位元組的對映。
實現:
輸入1個位元組:a = a7a6a5a4a3a2a1a0
輸出1個位元組:b = s[a7a6a5a4][a3a2a1a0]
示例:
輸入a=0x00-> 輸出 s[0][0]=0x63 -> s』[6][3]=0x00
輸入a=0x83-> 輸出 s[8][3]=0xec -> s』[0x0e][0x0c]=0x83
實現**:
/*
* 加密 s盒 s-box
*/static uint8_t g_aes_sbox[256] =
;
/*
*解密s盒- invs_box
*/static uint8_t g_aes_invsbox[256] =
;
/*
* 函式名:aes_sub_bytes
*功能:位元組替代。通過s盒完成乙個位元組到另乙個位元組的對映。
*說明:設輸入位元組的值為a=a7a6a5a4a3a2a1a0,
* 則輸出值為: s[a7a6a5a4][a3a2a1a0]
* s盒為16x16的矩陣。
*/void aes_sub_bytes(uint8_t *state)
}}
/*
* 函式名:aes_inv_sub_bytes
*功能:位元組替代。通過s盒完成乙個位元組到另乙個位元組的對映。
*說明:設輸入位元組的值為a=a7a6a5a4a3a2a1a0,
* 則輸出值為: s[a7a6a5a4][a3a2a1a0]
* s盒為16x16的矩陣。
*/void aes_inv_sub_bytes(uint8_t *state)
}}
目的:將矩陣中的每個橫列進行迴圈式移位。
第0行迴圈左移0位,即不變;
第1行迴圈左移1位;
第2行迴圈左移2位;
第3行迴圈左移3位;
目的:利用gf(2^8)域上算術特性的乙個代替。
正向左乘矩陣和逆向左乘矩陣的關係:
注意:
1。byte(d7~d0)*2的結果:將該值的二進位制位左移 1位,若d7=1,移位結果異或0x1b(00011011)。
2。乘法對加法滿足分配率。
3。列混淆的矩陣乘法與一般意義上的矩陣乘法有所不同,各值在相加時使用模2加法(xor運算)。
目的:
矩陣中的每個位元組與該輪金鑰做xor運算。
操作:
加密過程,每輪的輸入與輪金鑰異或一次;
解密過程,每輪的輸入再異或上該輪金鑰即可恢復。
目的:
將初始金鑰生成n個子金鑰。n為加密輪數。
操作:
將初始金鑰以列為主,轉化為4個32bit的字(w0~w3)。依次求解w[j],其中j[4,43]
若j%4=0,則 w[j] = w[j-4] xor g(w[j-1])
否則:w[j] = w[j-4] xor w[j-1] .
函式g的流程:
將w迴圈左移1個位元組;
分別對每個位元組按s盒進行對映;
與32bits的常量(rc[j/4],0,0,0)
進行異或。
C語言實現簡單 詞法分析程式(編譯原理)
遇 為0,結束迴圈。void scaner token m 0 字元陣列結尾符號 回退乙個字元 此時的p代表 非字母或數字的字元的 下乙個字元 p 回退到 非字母或數字的那個字元 先預先設定為 識別符號的 種別碼 syn 10 for n 0 n 6 n if strcmp token,rwtab ...
r語言聚類分析 R語言實現tSNE聚類分析
t sne t distributed stochastic neighborembedding 是用於降維的一種無監督機器學習演算法,由 laurens van der maaten 和 geoffrey hinton在08年提出。t sne 作為一種非線性降維演算法,非常適用於高維資料降維到2維...
C 語言實現 演算法分析與設計 全排列問題
設a 是要進行排列的n個元素的集合 這裡用技巧性演算法,即觀察 當n 1時,輸出a1 當n 2時,輸出a1a2,a2a1 當n 3時,輸出 我們注意觀察,每種可能的排列的第乙個元素,我們發現第乙個元素的值只能是n 3時,出現的所有可能的元素,而後面則是另外剩下的3 1 2個數的全排列,而這另外剩下的...