一、AES密鑰生成過程
AES (Advanced Encryption Standard) 是對稱密鑰加密算法,密鑰長度可以為 128 位、192 位或 256 位。在 AES 算法中,密鑰生成時,需要經過以下幾個步驟:
1. 密鑰擴展
密鑰擴展算法會根據預設的密鑰長度,生成論輪密鑰。對於每一輪,都需要生成一個子密鑰。擴展算法有如下兩個過程:
(1) 密鑰調度算法
通過密鑰的每一個字來生成輪密鑰,是密鑰擴展算法的核心。具體過程是將每個字進行變換和替換,得到生成一個輪密鑰所需的字。整個密鑰擴展的過程就是調用這個算法,逐步生成每一輪的子密鑰。
(2)循環移位操作
循環移位實際上就是將字節循環左移。該操作可以擾動輸入數據塊中各個字的關聯性,增加加密算法的強度。
2. 密鑰排列
密鑰排列是將生成的輪密鑰按照預設的規律排列,以便後續的加密運算使用。
二、AES密鑰生成器C
AES密鑰生成器C語言程序如下:
#include "AES.h" void aes_key_generation(unsigned char *temp_key, aes_ctx_t *aes_ctx) { aes_init(); aes_set_key(temp_key, aes_ctx); }
三、AES密鑰生成器
AES密鑰生成器主要有兩個方面的工作:輸入密鑰和生成輪密鑰。
1. 輸入密鑰
輸入密鑰有以下幾個要求:
(1)長度要符合128、192、256比特
密鑰長度要符合標準,否則無法加密。同時,密鑰長度越長,加密難度越大,加密強度越高。
(2)密鑰要保密性強
密鑰的強度決定了加密算法的強度,要保證密鑰的安全性,避免被攻擊者獲取。
2. 生成輪密鑰
根據輸入的密鑰長度,生成對應的輪密鑰,具體過程參見1、AES密鑰生成過程。
四、AES密鑰生成C代碼
AES密鑰生成C代碼如下:
#include #include #include #include int main(int argc, char *argv[]) { unsigned char aes_key[17] = "abc123"; unsigned char key_buf[17] = { 0 }; AES_KEY aes; AES_set_encrypt_key(aes_key, 128, &aes); for (int i = 0; i < 11; i++) { if (i == 0) { memcpy(key_buf, aes_key, 16); } else { memcpy(key_buf, key_buf + 4, 12); } key_buf[12] ^= aes_key[12 * i]; key_buf[13] ^= aes_key[1 + 12 * i]; key_buf[14] ^= aes_key[2 + 12 * i]; key_buf[15] ^= aes_key[3 + 12 * i]; AES_encrypt(key_buf, key_buf, &aes); printf("Round %d: ", i); for (int j = 0; j < 16; j++) { printf("%02X", key_buf[j]); } printf("\n"); } return 0; }
五、AES密鑰生成流程圖
下圖為AES密鑰生成流程圖:
六、AES密鑰生成算法
AES密鑰生成算法只有一個,即密鑰擴展算法。密鑰擴展算法是根據輸入的密鑰長度,計算出輪數和輪密鑰。具體實現方式參考1、AES密鑰生成過程。
七、AES密鑰生成工具
常見的AES密鑰生成工具有AES Encryption Tool,該工具可以自動生成AES加密密鑰,同時也支持自定義密鑰長度。在加密過程中,可以選擇CBC、ECB和CTR等模式,以及填充方式和初始化向量等參數。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/284846.html