高級(jí)加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES)
一、DES 與 AES 比較:
1、DES 采用 56位有效密鑰,AES 采用 多種 密鑰長(zhǎng)度
2、DES 對(duì) 64位分組數(shù)據(jù)進(jìn)行加密,AES對(duì) 128位分組數(shù)據(jù)進(jìn)行加密
3、不同于 DES ,AES 不是采用 Feistel 結(jié)構(gòu),而是置換-組合結(jié)構(gòu)
4、DES 中大量的位操作在軟件實(shí)現(xiàn)方面不是非常方便,而AES 采用了字節(jié)操作。
二、圖示 AES 加密過(guò)程:

對(duì)不同長(zhǎng)度的密鑰,AES采用不同的加密輪次:
加密過(guò)程下面有個(gè)視頻,我覺(jué)得講得很詳細(xì)。
三、某些細(xì)節(jié):
①: 密鑰擴(kuò)展:簡(jiǎn)單說(shuō)就是將原來(lái)的密鑰擴(kuò)展到足夠用的長(zhǎng)度。
128位密鑰: 擴(kuò)展到 44字(176字節(jié))
192位密鑰: 擴(kuò)展到 13*4 = 52 字
256位密鑰: 擴(kuò)展到 15*4 = 60 字
擴(kuò)展過(guò)程請(qǐng)參考代碼(不貼出來(lái))和視頻。 fun_KeyExpansion()
②: 輪密鑰加:只是將 數(shù)據(jù)塊和 該輪的密鑰進(jìn)行異或運(yùn)算 。
③:字節(jié)替換:有個(gè)S盒可以進(jìn)行替換。(相對(duì)于 DES 的替換 ,感覺(jué)這個(gè)函數(shù)的實(shí)現(xiàn)是小兒科 )
比如現(xiàn)在有一個(gè)字節(jié)為: 0x19 (16進(jìn)制!) 則替換為 0xd4

④: 行移位:分成 4 行 第一行不用移位,第二循環(huán)左移 8 位 (一個(gè)字節(jié) ?。?第三行循環(huán)移2個(gè)字節(jié),第四行移3個(gè)字節(jié)。
⑤: 列混淆:這里采用了 上的乘法 。
#define GF_01(b) ((byte)b)
#define GF_02(b) ((byte)((b < 0x80)? ((b<<1)) : (((b<<1) ^ 0x1b))))
#define GF_03(b) ((byte)(((GF_02(b)))^ (( b))))
這幾個(gè)宏定義,定義了幾個(gè)運(yùn)算 而計(jì)算過(guò)程參考下圖和 線性代數(shù)知識(shí)。

解密過(guò)程調(diào)用函數(shù)不同,理解了加密解密只是一個(gè)逆過(guò)程。
四、實(shí)現(xiàn)過(guò)程的一些解釋:
①:首先數(shù)據(jù)在內(nèi)存中存放方式:

②:行移位的時(shí)候采用按字操作,需要注意字有大小端之分:使用宏定義<Little_Endian> 進(jìn)行控制
|