AES 復号ツール
AES-128/192/256 の暗号文を復号。OpenSSL の「Salted__」(U2FsdGVkX1…)、CryptoJS の出力、16 進の鍵と IV による CBC・GCM・CTR・CFB・OFB・ECB に対応します。
出力は Base64 の OpenSSL「Salted__」形式です(8 バイトのランダムなソルト+暗号文)。鍵と IV はパスフレーズとソルトから導出されるため、同じテキストでも毎回結果が変わります。同等のコマンド:
openssl enc -aes-256-cbc -d -md md5 -a -A -k '…'すべてブラウザ内で実行されます。データがア ップロードされることはありません。
AES 復号とは?
AES の暗号文をブラウザ内で復号します。openssl enc や CryptoJS.AES.encrypt(text, passphrase) が生成する OpenSSL の「Salted__」形式(U2FsdGVkX1 で始まる Base64 文字列)のほか、16 進の鍵と IV を使った CBC・CFB・CTR・OFB・ECB・認証付き GCM の生の暗号文にも対応します。パディングを検証するため、鍵が違えば意味不明な出力ではなくエラーとして報告されます。
AES 復号の使い方
- 暗号化時と同じ 鍵の指定方法 を選びます。
U2FsdGVkX1…(「Salted__」)のデータなら パスフレーズ(OpenSSL 互換)、生の暗号文なら 生の鍵 + IV(16 進) です。 - パスフレーズ(と同じ 鍵導出)、または 16 進の鍵と IV を入力します。
- 送信側と同じ モード と パディング を設定し、暗号文(Base64 または Hex)を貼り付けます。
- 復号 をクリックします。出力はテキスト(UTF-8)のままにするか、平文がバイナリなら Hex に切り替えます。
例
U2FsdGVkX19HHh9Vv809WnL0M8IWPgnpihePLw8JpDQ= (passphrase "secret", AES-256, CBC, EVP_BytesToKey MD5)
Hello, World!
openssl enc -aes-256-cbc -md md5 -a -k secret で生成した暗号文。
AES 復号を使うべき場面
OpenSSL や CryptoJS で暗号化されたデータの読み取り、アプリケーションが復号できない原因のデバッグ、テストベクターの確認に使えます。正しいパスフレーズまたは鍵が必要で、このツールは紛失した鍵の復元や AES の解読はできません。他の製品(ZIP、データベース、パスワードマネージャー)の暗号文は独自のコンテナ形式を持つことが多く、ここでは復号できません。
AES 復号の仕組み
パスフレーズのデータでは、先頭 16 バイトが Salted__ + 8 バイトのソルトである必要があります。鍵と IV は、openssl enc -d と同様に、パスフレーズとソルトから EVP_BytesToKey(MD5)または指定の反復回数の PBKDF2-HMAC-SHA256 で再導出され、残りが復号されます。生の鍵では 16 進の鍵と IV がそのまま使われます。CBC/ECB の復号後は PKCS#7 パディングを 1 バイトずつ検査します。不一致の多くは、鍵・IV・モード・鍵長のいずれかの誤りです。GCM では、末尾 16 バイトのタグが Web Crypto によって検証されてから平文が表示されます。
一般的な使用例
-
openssl enc -aes-256-cbc -aが出力したU2FsdGVkX1…文字列を復号する - Web アプリで
CryptoJS.AES.encryptにより暗号化された値を確認する - バックエンドが生成した AES-GCM の暗号文とタグを検証する
- 可能性の高い設定を試して、使われた鍵長やモードを突き止める
- API や連携のデバッグ中にテストデータを復号する
セキュリティ注意事項
復号はローカルで行われ、パスフレーズも平文も端末の外へ出ません。データが改ざんされていないことを証明できるのは GCM だけです。
よくある質問
「Invalid padding」や「パスフレーズが違う」と出るのはなぜですか?
復号した最後のブロックが正しい PKCS#7 パディングで終わっていません。パスフレーズ、鍵長(128/192/256)、モード、鍵導出(MD5 か PBKDF2 とその反復回数)を確認してください。OpenSSL 1.1 以降は -pbkdf2 なしだと既定が -md sha256 になりますが、これは未対応です。-md md5 または -pbkdf2 で暗号化し直してください。
CryptoJS の出力を復号できますか?
はい。CryptoJS.AES.encrypt(text, "passphrase").toString() は、AES-256-CBC と EVP_BytesToKey/MD5 を使う同じ Salted__ 形式で、ここでの既定設定と同じです。
暗号文が U2FsdGVkX1 で始まりません。どうすればよいですか?
その場合は生の鍵で暗号化されています。鍵の指定方法 を 生の鍵 + IV(16 進) に切り替え、プログラムが使った鍵と IV を入力してください。IV を暗号文の先頭に付けるプログラムもあります。その場合は IV を切り離して IV 欄に入力します。
復号結果がランダムな文字に見えるのはなぜですか?
ストリームモード(CTR・CFB・OFB)には検証するパディングがないため、鍵が違うとランダムなバイト列になります。ツールはそれを無効な UTF-8 として報告します。バイナリデータが想定されるなら、出力を Hex に切り替えてください。