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 復号の使い方

  1. 暗号化時と同じ 鍵の指定方法 を選びます。U2FsdGVkX1…(「Salted__」)のデータなら パスフレーズ(OpenSSL 互換)、生の暗号文なら 生の鍵 + IV(16 進) です。
  2. パスフレーズ(と同じ 鍵導出)、または 16 進の鍵と IV を入力します。
  3. 送信側と同じ モード と パディング を設定し、暗号文(Base64 または Hex)を貼り付けます。
  4. 復号 をクリックします。出力はテキスト(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 に切り替えてください。

他のカテゴリを見る