AES

AES

Advanced Encryption Standard,縮寫:AES,又稱Rijndael加密法,但嚴格來說 AES 和 Rijndael 加密法並不完全一樣,因為 Rijndael 加密法可以支援更大範圍的區塊長度,AES的區塊長度固定為128位元而Rijndael使用的區塊長度可以是128,192或256位元。AES用來替代原先的DES。

AES的區塊長度固定為 128 位元,金鑰長度則可以是128,192或256位元;而Rijndael使用的金鑰和區塊長度均可以是128,192或256位元。

AES加密過程是在一個4×4的位元組矩陣上運作,其初值即為一個明文區塊,矩陣中一個元素大小就是明文區塊中的一個Byte。

其加密方法主要包含四個步驟

1. AddRoundKey: 將每個狀態中的位元組與該回合金鑰做異或(⊕)。
2. SubBytes:    矩陣中各位元組被固定的8位元尋找表中對應的特定位元組所替換。
3. ShiftRows:   矩陣中每一行的各個位元組循環向左方位移。位移量則隨著行數遞增而遞增。
4. MixColumns:  每個直行與 AES 定義的多項式 c(x) 進行多項式乘法。

AES-256 範例

AES之區塊加密模式

在CBC、OFB、CFB、CTR等區塊模式 IV 長度均為 16 bytes,GCM模式的 IV 則沒有一定要 16 bytes

AES-256-CBC範例

AES-256-GCM範例

需要加上cipher.getAuthTag(); 與 decipher.setAuthTag();

目前 AuthTag 與 Additional Authenticated Data ( AAD ) 在 Node.js 只有 GCM 模式支援,cipher.setAAD需要在 update() 之前使用,而 cipher.getAuthTag() 必須要在cipher.final()執行後才能使用。

IV 與 AuthTag

使用openssl加密檔案

加上密碼

https://www.shellhacks.com/encrypt-decrypt-file-password-openssl/

Last updated

Was this helpful?