AES 加密

用 AES 加密或解密。單向摘要請用 雜湊計算

這一頁加密什麼

AES 是分組密碼。這一頁在瀏覽器裡用 ECB、CBC、CTR、OFB、CFB 或 GCM 運算,金鑰是 16、24 或 32 位元組。密碼的單向指紋在 雜湊計算。

怎麼用

  1. 貼上輸入。加密模式一開始是 CBC。填充一開始是 pkcs7padding。字元集一開始是 UTF-8。
  2. 金鑰格式和偏移量格式一開始是文字。輸入格式一開始是文字。輸出格式一開始是 hex。ECB 不顯示偏移量。GCM 會顯示 Tag 長度和 AAD,並把填充固定成 nopadding。
  3. 加密做加密。解密做解密。顯示範例填入 hello、CBC、pkcs7padding、UTF-8、金鑰 1234567890abcdef、偏移量 1234567890abcdef,hex 結果是 7e6347a62a0a976373e79b1bd586363d。
  4. 交換把結果放回輸入框,並把輸入格式改成剛才的輸出格式。把輸出格式改成文字,再點解密。同一把金鑰和偏移量得到 hello。
  5. 全部清除會清空輸入並恢復 CBC、pkcs7padding、UTF-8、文字格式和 hex 輸出。複製結果複製輸出。

金鑰、偏移量、填充和 Tag

文字按字元集變成位元組。hex 和 Base64 本身就是位元組,不再套用字元集。金鑰接著必須是 16、24 或 32 位元組,也就是 AES-128、AES-192 或 AES-256。1234567890abcdef 這種 16 個 UTF-8 字元的金鑰就是 16 位元組。

CBC、CFB、OFB 和 CTR 的偏移量是 16 位元組。ECB 不用偏移量。GCM 接受任意非空偏移量,常見長度是 12 位元組。pkcs5padding 和 pkcs7padding 在這裡一樣,都補 1 到 16 個位元組,使長度成為 16 的倍數。nopadding 不改位元組,所以 ECB 和 CBC 這時要求長度已經是 16 的倍數。GCM 只能用 nopadding。

GCM 的 Tag 接在密文後面。Tag 長度預設 128 位元。AAD 參與校驗,本身不加密。解密不接受文字輸入,加密不接受文字輸出。金鑰、偏移量、Tag 或填充不對都會失敗。

用在哪裡

  • 拿一段 CBC 密文和另一個 AES 工具對一下。
  • 讀一段 Tag 接在 hex 末尾的 GCM 結果。
  • 在文字、hex 和 Base64 之間換金鑰格式。

問題

為什麼這裡的 pkcs5 和 pkcs7 一樣?

AES 的分組是 16 位元組。兩種填充都用同一個計數位元組補滿最後一組。

同一段文字每次 hex 都一樣嗎?

模式、填充、金鑰和偏移量不變時一樣。顯示範例的結果是 7e6347a62a0a976373e79b1bd586363d。