Toolonit
  1. 首頁
  2. 加密
  3. 加密 / 解密
  4. AES

AES 加密與解密

以 AES-128、192 或 256 加密與解密文字,支援 GCM、CBC、CTR 等模式。

加密方式

解密時還需要它。輸入的任何內容都不會離開這個頁面。

PBKDF2 迭代次數

OpenSSL 的預設值是 10,000。任何次數都可以:次數越多,密碼越難猜;解密時需要相同的次數。

模式

OpenSSL 最常用的選擇。需要 IV;會填充成完整區塊。

金鑰長度
輸出格式
用 OpenSSL 執行相同操作
openssl enc -aes-256-cbc -pbkdf2 -iter 10000 -a -A

OpenSSL 會詢問密碼;把文字貼進去,或加上 -in 與 -out 檔案。

以 AES-256(或 AES-128、AES-192)搭配密碼或自訂的金鑰與 IV 加密文字,或貼上 Base64 或十六進位的 AES 密文進行解密。使用密碼時,結果與 openssl enc -pbkdf2 的格式相同:Salted__ 標頭、隨機的 8 位元組鹽值與密文,金鑰與 IV 則由 PBKDF2-HMAC-SHA256 推導。預設為 CBC 模式的 AES-256、PKCS#7 填充與 Base64 輸出,與 openssl enc -aes-256-cbc -pbkdf2 -a 一致;GCM、CTR、CFB、OFB 與 ECB 也只要點一下就能切換。結果會隨輸入即時更新。全部在瀏覽器中進行,你的文字、密碼與金鑰都不會離開你的裝置;免費,也不需要註冊。

如何用 AES 加密與解密文字

  1. 選擇「加密」或「解密」。輸入要加密的文字,或貼上要解密的 Base64 或十六進位文字——格式會自動偵測。
  2. 輸入密碼(「產生」可建立高強度密碼),或切換到「金鑰與 IV(hex)」,輸入或產生符合所示長度的金鑰與 IV。
  3. 選擇金鑰長度(128、192 或 256 位元)與模式。解密時,請使用與加密時相同的密碼、迭代次數、金鑰長度與模式。
  4. 複製或下載結果,或按「交換」把結果移到輸入欄並切換方向。在「用 OpenSSL 執行相同操作」下方,頁面會顯示對應的 openssl 指令,其中不含你的密碼。

功能

  • CBC、GCM、CTR、CFB、OFB 或 ECB 模式的 AES-128、AES-192 與 AES-256
  • openssl enc -pbkdf2 格式的密碼模式:Salted__ 標頭、隨機 8 位元組鹽值,金鑰與 IV 由 PBKDF2-HMAC-SHA256 推導
  • PBKDF2 迭代次數可選 10,000(OpenSSL 預設)、100,000 或 600,000 次,或最多 1,000 萬次的任意次數
  • 金鑰與 IV 模式:使用自己的十六進位金鑰與 IV,或以「產生」建立隨機值
  • AES-GCM 能偵測錯誤的密碼或金鑰,以及密文的任何變動
  • PKCS#7 填充;CBC 與 ECB 也可以不填充
  • Base64 或十六進位輸出;自動辨識 Base64 或十六進位輸入
  • GCM 以外的所有模式都會顯示對應的 openssl enc 指令

隱私安全嗎?

是的。AES 在瀏覽器內以 WebAssembly 執行,密碼則由瀏覽器內建的 Web Crypto 轉換成金鑰。你的文字、密碼與金鑰絕不會上傳或儲存,頁面顯示的 openssl 指令也絕不包含它們。

常見問題

應該使用哪種 AES 模式?

新資料請用 GCM:除了加密,它還能偵測文字的任何變動與錯誤的密碼。對方使用無法讀取 GCM 的 openssl enc 時,請選預設的 CBC;CTR、CFB 或 OFB 只在需要配合既有系統時才選。請避免使用 ECB:相同的 16 位元組區塊會產生相同的輸出,文字中的規律會因此顯露出來。

可以用 OpenSSL 解密結果嗎?

可以,GCM 除外。使用預設設定時:echo 'U2FsdGVkX1…' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -a -A,OpenSSL 接著會詢問密碼。請把 256 與 cbc 換成你的金鑰長度與模式(ecb、ctr、cfb、ofb),把 -iter 改成你的迭代次數,若關閉了填充則加上 -nopad;十六進位輸出請去掉 -a -A,並先用 xxd -r -p 轉換文字再傳入。金鑰與 IV 模式請以 -K <金鑰 hex> -iv <IV hex> 取代 -pbkdf2 -iter。openssl enc 不接受 GCM(不支援 AEAD 加密法),所以 GCM 文字只能在這裡或用程式碼讀取。

為什麼每次加密的結果都不同?

因為每次以密碼加密都會選用新的隨機鹽值,所以金鑰、IV 與整個輸出每次都會改變——而每個版本都能解密回相同的文字。這是刻意的設計:沒有人能看出兩則訊息是否相同。在金鑰與 IV 模式中,金鑰與 IV 相同時輸出就會重複,所以每則訊息都要產生新的 IV:以同一把金鑰重複使用 IV,會削弱 CBC 的安全性,並讓 CTR 與 GCM 完全失效。

為什麼顯示密碼錯誤?

因為有設定不一致:密碼、迭代次數、金鑰長度、模式與填充都必須和加密時相同,而文字中只儲存了鹽值。以 U2FsdGVkX1 開頭、但由未加 -pbkdf2 的 openssl enc 或以通關密語使用 CryptoJS 產生的文字,採用的是較舊的金鑰推導方式(EVP_BytesToKey),本頁無法讀取——請加上 -pbkdf2 重新加密,或在擁有原始金鑰與 IV 時改用金鑰與 IV 模式。

AES-256 加密安全嗎?

安全。無論哪種金鑰長度,AES 都沒有實際可行的攻擊方式;弱點在於密碼。請使用又長又隨機的密碼(「產生」可以建立),並在兩端都由你掌控時,把迭代次數提高到 600,000 次,這是 OWASP 目前對 PBKDF2-HMAC-SHA256 的建議值。如果還需要確認文字沒有遭到竄改,請選擇 GCM。

相關工具