Skip to content

AES復号ツール — OpenSSL・CryptoJS互換

AESをオンラインで復号 — GCM/CBC/CTR、パスフレーズまたは生鍵に対応し、OpenSSLとCryptoJSの「U2FsdGVkX1」形式を自動検出します。処理は100%ブラウザ内で完結し、鍵がこのページから出ることはありません。

トラッキングなし ブラウザで動作 無料
すべての処理はブラウザ内で完結します — 鍵とデータがこのページから出ることはありません。
推奨
鍵長
鍵の種類
詳細オプション
平文
専用の暗号化ページが必要ですか?
FIPS 197、NIST SP 800-38D、OWASP、W3C Web Crypto仕様に照らして暗号学的正確性をレビュー済み — Go-Tools セキュリティチーム · Jul 16, 2026

AES復号の仕組み

AESの復号は暗号化の正確な逆操作です — データを攪拌したのと同じ対称鍵を使って、暗号のラウンドを逆順に実行し、元のバイト列を復元します。AESは対称暗号であるため、別個の「復号鍵」は存在しません — 暗号化に使われたのとまったく同じ鍵またはパスフレーズ、モード、IVを指定する必要があります。パラメータが正しければ平文はバイト単位で正確に復元されますが、1つでも間違えるとエラーかガベージになります。

正しく復号するには、次の4つが暗号化時と完全に一致していなければなりません — 鍵(またはパスフレーズとその鍵導出設定)、動作モード(GCM、CBC、またはCTR)、IVまたはノンス、そしてGCMの場合は認証タグです。いずれかが欠けていると、結果はハードエラー(GCMの認証失敗、CBCのパディング失敗)か、無言のガベージ(CTR、または誤ったIVでのCBC)になります。このツールは、ソルト、IV、タグが暗号文に内包されている場合はそれらを読み取り、何かが一致しないときはその失敗の原因を診断します。

暗号文にはいくつかの異なる形があり、このツールは3種類を理解します。フォーマット1は自己完結型のパスフレーズレイアウトです — 16バイトのソルト、続いてIV、続いて暗号文(GCMモードではGCMタグが末尾に付加されます) — パスフレーズだけで復号できます。フォーマット2は生鍵レイアウトです — 暗号文の前にIVが付加されているか、IVを別途入力する「ベア」暗号文です。フォーマット3はOpenSSLレイアウトで、openssl encコマンドやCryptoJSによって生成されます。

このOpenSSL形式は見た目で覚えておく価値があります。8バイトのASCII文字列Salted__で始まり、続いて8バイトのソルト、続いて暗号文が続きます。全体をBase64エンコードすると、先頭のバイトは常にU2FsdGVkX1というプレフィックスとして表示されます。そのため、渡された暗号文がU2FsdGVkX1で始まる場合、それはほぼ確実にopenssl encかCryptoJSのAES.encrypt(text, passphrase)呼び出しによって生成されたものです。CryptoJSはMD5を1回だけ使うレガシーなEVP_BytesToKey関数で鍵を導出する一方、最新のopensslはPBKDF2を使います — これが、これらを復号する際に正しい鍵導出関数を選ぶことがすべてを左右する理由です。入力がBase64で、生のバイト列を見たいだけなら、Base64デコーダーで確認できます。これらの形式で暗号文を作成するには、AES暗号化ツールを使ってください。

// AES-256-GCM decrypt with a passphrase (PBKDF2-HMAC-SHA256, 600,000 iterations).
// Identical code runs in the browser and in Node.js 20+ via Web Crypto.
async function aesGcmDecrypt(base64, passphrase) {
  const enc = new TextEncoder();
  const packed = Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));
  const salt = packed.slice(0, 16), iv = packed.slice(16, 28); // salt(16) | iv(12)
  const ct = packed.slice(28);                                 // ciphertext + tag
  const baseKey = await crypto.subtle.importKey(
    'raw', enc.encode(passphrase), 'PBKDF2', false, ['deriveKey']);
  const key = await crypto.subtle.deriveKey(
    { name: 'PBKDF2', salt, iterations: 600000, hash: 'SHA-256' },
    baseKey, { name: 'AES-GCM', length: 256 }, false, ['decrypt']);
  const plain = await crypto.subtle.decrypt(
    { name: 'AES-GCM', iv }, key, ct);        // throws if the tag fails
  return new TextDecoder().decode(plain);     // recovered plaintext
}

主な機能

OpenSSL・CryptoJS出力を自動検出

U2FsdGVkX1で始まる暗号文を貼り付けると、ツールはSalted__形式を認識し、対応する復号フローへワンクリックで切り替えを提案するので、行き詰まったエラーと格闘せずに済みます。

3種類の鍵導出関数

openssl enc形式のあらゆる世代にわたって復号できます — カスタムの反復回数を指定できるPBKDF2、SHA-256を使うEVP_BytesToKey、CryptoJSが使うレガシーなMD5単回パスです。

復号が失敗した理由を説明

一般的なエラーの代わりに診断が得られます — 鍵の誤りとIVの誤りの区別、GCMの認証失敗、CBCのパディングエラー、Base64の汚染、あるいは「これはMD5時代の暗号文のようです。EVP-MD5を試してください」といった具合です。

対応するopensslコマンドをリアルタイム表示

コマンドラインで復号を再現する正確なopenssl enc -dコマンドを、反復回数も含めて確認できるので、ブラウザの外でも結果を検証できます。

パスフレーズまたは生鍵、GCM/CBC/CTR

自己完結型のパスフレーズ暗号文、IVが先頭に付加されたまたは別途入力する生鍵暗号文、そしてWeb Cryptoの3つのモードすべてに対応します。

100%ブラウザ内で完結

暗号文と鍵はWeb Crypto APIを使ってローカルで処理され、アップロードされることはありません — ネットワークタブで確認するか、オフラインにして検証できます。

AES復号の例

自己完結型のパスフレーズ暗号文を復号する(GCM)

salt(16) ‖ iv(12) ‖ ciphertext ‖ tag(16)、Base64 — 暗号化ページから
素早い茶色の狐がのろまな犬を飛び越える。

これは暗号化ページのGCM例の逆操作です。パスフレーズhunter2に対して生成された自己完結型のBase64文字列を、モードGCM、鍵長256、鍵の種類パスフレーズ、同じパスフレーズhunter2とともにここに貼り付けると、元の文が復元されます。ソルトやIVを別途入力する必要はありません — ツールは文字列の先頭にある16バイトのソルトと12バイトのIVを読み取り、PBKDF2-HMAC-SHA256(600,000回反復)で鍵を導出し、付加された128ビットのGCMタグを検証してからテキストを返します。暗号化ページで「サンプルを読み込む」をクリックして新しい文字列を生成し、ここで復号してみてください。

実際のOpenSSL / PBKDF2出力を復号する

U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=
Attack at dawn!

これは本物のopenssl enc出力です。これを貼り付け、OpenSSLモード(モードCBC、鍵の種類パスフレーズ)に切り替え、パスフレーズcorrect-horseを入力し、鍵導出関数にPBKDF2を選び、反復回数を10,000に設定すると — 平文はAttack at dawn!になります。U2FsdGVkX1というプレフィックスは、これがSalted__形式であることをツールに伝え、8バイトのソルトはそのヘッダーの直後、Base64の中に収まっています。このコマンドラインでまったく同じ復号を再現できます: echo 'U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -pass pass:correct-horse -base64 -A。似たような暗号文がPBKDF2で失敗する場合、それはおそらくCryptoJSで作られたものです — KDFをEVP-MD5に切り替えて再試行してください。「OpenSSLサンプルを読み込む」をクリックすると、これらの値が自動的に入力されます。

AES暗号文を復号する方法

  1. 1

    暗号文を貼り付ける

    Base64またはHexの暗号文を入力欄にドロップしてください。U2FsdGVkX1で始まる場合、ツールはOpenSSL/CryptoJS形式として検出し、正しいモードへの切り替えを提案します。

  2. 2

    形式とモードを設定する

    このツールで生成された自己完結型の文字列の場合は、パスフレーズモードと一致するGCM/CBC/CTRのままにしてください。OpenSSL/CryptoJSの出力の場合は、提案された切り替え(CBC + パスフレーズ)を受け入れてください。生鍵データの場合は、生鍵とエンコーディングを選び、IVが先頭に付加されていない場合は別途入力してください。

  3. 3

    鍵導出関数を選ぶ

    OpenSSLモードでは、鍵がどのように導出されたかに合わせてPBKDF2(と反復回数)、EVP-SHA256、またはEVP-MD5を選んでください。EVP-MD5はCryptoJSが使用するものです。

  4. 4

    パスフレーズまたは鍵を入力する

    正確なパスフレーズを入力するか、正確な生鍵を16進数またはBase64で貼り付けてください。すべてが一致すると、右側にすぐ平文が表示されます。

  5. 5

    失敗した場合は診断を確認する

    復号がエラーになった場合、パネルが可能性の高い原因を示します — IVの誤り、鍵の誤り、パディングエラー、Base64の汚染、KDFの不一致など。これにより、当てずっぽうではなく一度に1つずつ設定を調整できます。

AES復号が失敗する理由と対処法

GCM認証に失敗

GCMはタグが検証できない場合、平文を返すことを拒否します。原因はパスフレーズや鍵の誤り、モードの誤り、IVの誤り、または暗号文の改ざん・切り詰めのいずれかですが、GCM自身はどれが原因かまでは教えてくれません。データを暗号化したときの設定と一つずつ照らし合わせてください。

✗ 誤り
mode: CBC        // but the data was encrypted with GCM
=> Authentication failed
✓ 正しい
mode: GCM, same passphrase and key size as encryption
=> plaintext

CBC:最初のブロックが乱れている場合はIVの誤り

CBCではIVは最初の16バイトブロックにのみ影響します。最初のブロックがガベージで残りがきれいにデコードされる場合、IVが間違っています。すべてがガベージの場合は、鍵が間違っています。

✗ 誤り
iv: 00000000000000000000000000000000   (wrong IV)
=> first block corrupt, rest readable
✓ 正しい
iv: (the exact IV used to encrypt)
=> Attack at dawn!

CBC / PKCS#7パディングエラー

パディングエラーはほとんどの場合、鍵が間違っていることを意味します。暗号文が破損・切り詰められていたり、PKCS#7でパディングされていなかったりした可能性もあります。暗号文全体がコピーされていること、そしてパスフレーズとKDFが一致していることを確認してください。

✗ 誤り
passphrase: hunter3   // one character off
=> padding error
✓ 正しい
passphrase: hunter2   // exact
=> plaintext

Base64(またはHex)の汚染

暗号文と一緒に貼り付けられた改行、スペース、スマート引用符はデコードを壊します。このツールは空白文字を自動的に除去しますが、文字が欠けていたり余分だったりするとそれでも失敗します。

✗ 誤り
“U2FsdGVkX1...”   (curly quotes and trailing junk copied in)
✓ 正しい
U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=   (clean Base64)

U2FsdGVkX1を検出したがOpenSSLモードがオフ

入力がU2FsdGVkX1で始まる場合、それはOpenSSL/CryptoJSのSalted__出力であり、通常のパスフレーズ文字列としては復号できません。ツールがバナーを表示するので、「OpenSSLモードに切り替え」をクリックしてKDFを選んでください。

✗ 誤り
OpenSSL compatible: off
input: U2FsdGVkX1...
=> cannot parse
✓ 正しい
OpenSSL compatible: on, KDF chosen
=> plaintext

KDFの不一致(CryptoJSの罠)

PBKDF2やSHA-256では失敗するのにEVP-MD5では復号できる暗号文は、CryptoJSまたはopenssl 1.0.2以前によって作られたものです。コマンドラインでは-md md5が必要です。

✗ 誤り
KDF: PBKDF2       // CryptoJS ciphertext
=> padding error
✓ 正しい
KDF: EVP-MD5      // matches CryptoJS
=> plaintext

AES復号でできること

openssl enc出力を復号する
openssl enc -aes-256-cbcで生成されたSalted__形式のデータを、ターミナルに切り替えることなく読み取れます — Base64を貼り付け、パスフレーズを入力し、KDFを選ぶだけで平文が得られます。
CryptoJSの暗号文を復号する
CryptoJSのAES.encrypt(text, passphrase)を使ったレガシーアプリからデータを復元します。EVP-MD5を選んで、そのMD5単回パスの鍵導出に合わせてください — ほとんどの人が見落とすステップです。
失敗し続ける復号をデバッグする
自分のコードが何かを復号できないとき、ここに貼り付けて、鍵、IV、モード、エンコーディング、KDFのどこに問題があるかを診断パネルで切り分けられます。
暗号化の往復動作を検証する
AES暗号化ページや自分のアプリからの暗号文が、元のバイト列と正確に一致する形で復号されることを確認します。
不明な暗号文の正体を理解する
U2FsdGVkX1のプレフィックスや、IVらしき固定長のプレフィックスなど、形からフォーマットを特定し、鍵を試す前にどのように生成されたのかを把握します。

AES復号の内部構造と形式

GCM復号 — 認証付き
GCMは暗号文に対して128ビットのタグを再計算し、平文を返す前に比較します。不一致の場合は破損データを漏らすのではなく例外を投げます。先頭に付加された96ビットのIVを使用します。GCMの失敗は、鍵、モード、IV、暗号文のいずれかが間違っていることを意味しますが、暗号自体はどれが原因かまでは教えてくれません。
CBC復号 — 最初のブロックとパディングに注目
CBCには2つの異なる失敗パターンがあります。最初の16バイトブロックだけが乱れていて残りが正しく見える場合、IVが間違っています。すべてのブロックがガベージの場合、鍵が間違っています。PKCS#7パディングエラーは通常、鍵が間違っているか、暗号文が破損・切り詰められたことを意味します。CBCには(HMACのような認証付き構成とは異なり)タグがないため、間違った鍵でもそれらしく見えるバイト列に復号されてしまうことがあります。
CTR復号 — エラー時も静か
CTRは決して例外を投げません — 間違った鍵は単にガベージを生成し、それは通常、バイト列をテキストにデコードした時点で「有効なUTF-8ではない」というエラーとして現れます。カウンター/IVを正確に一致させてください。完全性チェックがないため、別途認証していないCTR出力は疑ってかかるべきです。
暗号文のレイアウト(F1 / F2 / F3)
フォーマット1(パスフレーズ)は、ソルト(16)、続いてIV、続いて暗号文で、GCMモードでは16バイトのGCMタグが末尾に付加されます。フォーマット2(生鍵)は、IVに続いて暗号文、または別途IVを入力するベア暗号文です。フォーマット3(OpenSSL)は、ASCIIヘッダーSalted__に続いて8バイトのソルト、続いて暗号文です。どのレイアウトかを知ることで、ソルトとIVがどこにあるかがツールにわかります。生鍵自体はCSPRNGから生成すべきです — 秘密鍵生成ツールを参照してください。
鍵導出:データを暗号化したものに合わせる
自己完結型のパスフレーズ暗号文の場合、このツールはPBKDF2-HMAC-SHA256を600,000回反復して使用します。OpenSSL/CryptoJSの暗号文の場合は、使用されたKDFを選ぶ必要があります — PBKDF2(openssl -pbkdf2のデフォルトは10,000回反復です。正確な回数を設定してください)、SHA-256を使うEVP_BytesToKey(-pbkdf2を使わないopenssl 1.1以降)、またはMD5を1回だけ使うEVP_BytesToKey(CryptoJSとopenssl 1.0.2以前)です。典型的な「復号できない」バグは、CryptoJSや古いopensslの暗号文をSHA-256で試すことです — EVP-MD5に切り替えればうまくいきます。

AES復号のベストプラクティス

まず形式を特定することから始める
設定をいじる前に、暗号文を見てください。U2FsdGVkX1プレフィックスはOpenSSL/CryptoJSを意味し、このツールで生成された自己完結型の文字列はパスフレーズ形式を意味し、ベアなデータは通常、生鍵と別途のIVが必要です。
鍵導出関数を正確に一致させる
OpenSSL/CryptoJSの暗号文では、KDFはパスフレーズと同じくらい重要です。PBKDF2が失敗する場合はEVP-MD5(CryptoJS、古いopenssl)を試してください。反復回数もアルゴリズムと同様に一致させる必要があります。
暗号文をきれいに貼り付ける
コピーの際に紛れ込む改行やスペースはBase64を壊すことがあります。このツールは空白文字を除去しますが、それでもデコードに失敗する場合は、スマート引用符、文字の欠落、途中で切れたコピーがないか確認してください。Base64ツールで怪しい文字列を検査できます。
鍵が間違っている結果を正直に扱う
CTRやCBCでは、間違った鍵がエラーではなくバイト列を生成することがあります。出力がガベージに見える、またはUTF-8チェックに失敗する場合は、鍵かIVが間違っています — 部分的にそれらしく見える出力を信用しないでください。
秘密の暗号文や鍵を決してサーバーに送らない
ブラウザで復号する意味は、何もページから出ていかないことにあります。アップロードするツールは避けてください。このツールはWeb Cryptoをローカルで使用しており、ネットワークタブで確認するかオフラインにして検証できます。AES-256は強力です — CNSA 2.0でTOP SECRETまで承認されています — なので、復号できない場合、問題は暗号方式ではなくパラメータにあります。

AES復号に関するFAQ

鍵なしでAESを復号できますか?
できません — そう主張する相手には注意してください。AESには既知の実用的な弱点がないため、鍵やパスフレーズがなければ選択肢は総当たりしかなく、その数字は絶望的です。AES-256には2^256通りの鍵があり、天文学的に高速な推測を行ったとしても、宇宙の年齢をはるかに超える時間がかかります。AESには「パスワードを忘れた」ときの復元手段はなく、任意のAES暗号文を代わりに復号してくれる正当なサービスも存在しません。鍵を失っていればデータは失われており、鍵を持っていればこのツールがブラウザ内で復号します。鍵を持っているのに復号が失敗する場合、原因はほぼ常にモード、IV、鍵導出関数の誤りであり、暗号方式が壊れているわけではありません。
openssl enc出力を復号するにはどうすればよいですか?
Base64の暗号文(U2FsdGVkX1で始まります)を貼り付け、OpenSSLモードへの切り替えを促すツールの案内を受け入れるか、モードCBCと鍵の種類パスフレーズで手動でOpenSSL互換モードをオンにしてください。パスフレーズを入力し、opensslが使用した鍵導出関数を選びます — ファイルが-pbkdf2で作られた場合はPBKDF2(同じ反復回数を設定してください。デフォルトは10,000です)、-pbkdf2を使わない通常のOpenSSL 1.1以降のファイルの場合はEVP-SHA256です。ツールはミラーする正確なopenssl enc -dコマンドを表示します。例えば、echo 'U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -pass pass:correct-horse -base64 -Aは、Attack at dawn!を出力します。
暗号文の先頭にあるU2FsdGVkX1は何を意味しますか?
これはOpenSSLのSalted__形式の指紋です。OpenSSLとCryptoJSは、暗号文の前に8バイトのASCII文字列Salted__に続けて8バイトのソルトを付加します。これ全体をBase64エンコードすると、先頭のバイトは常にU2FsdGVkX1として現れます。これが見えるということは、そのデータがopenssl encコマンドかCryptoJSのAES.encrypt(text, passphrase)呼び出しによって生成されたこと、そして鍵がパスフレーズから導出されたことを意味します — つまり、生鍵ではなくパスフレーズと正しい鍵導出関数が必要になります。貼り付ければ、このツールが形式を自動検出し、対応するフローへの切り替えを提案します。
CryptoJSの暗号文を復号するにはどうすればよいですか?
CryptoJSのAES.encrypt(text, passphrase)はOpenSSLのSalted__形式を使いますが、鍵はMD5と1回の反復だけを使うレガシーなEVP_BytesToKey関数によって導出されます。そのため、暗号文を貼り付け、OpenSSLモードに切り替え、鍵導出関数にEVP-MD5を選んでください — これはほとんどの人が見落とす設定であり、CryptoJSの暗号文がPBKDF2やSHA-256で試したときに「復号できない」ように見える理由です。同じパスフレーズを入力すれば、平文が表示されます。コマンドラインでの対応する復号には-md md5が必要です。
GCMとCBC — 一方では復号できて、もう一方ではできないのはなぜですか?
モードは暗号化に使われたものと一致しなければならず、両者は互換ではありません。GCMは128ビットの認証タグを含んでおり、モード、鍵、IVを誤って選ぶと復号を拒否します(認証失敗)。CBCにはタグがないため、誤って選んでも、明確な失敗ではなくガベージやパディングエラーが静かに発生することがあります。GCMの認証が失敗し続ける場合は、データが本当にGCMかどうか確認してください。CBCでパディングエラーが出る場合は、パスフレーズと鍵導出関数を再確認してください。このツールの診断パネルは、一般的なエラーではなく最も可能性の高い原因を示します。
ここで復号すると暗号文や鍵はアップロードされますか?
されません。復号はすべてブラウザのWeb Crypto API(crypto.subtle)を通じて実行されます — これはブラウザがHTTPSに使用しているのと同じ監査済みエンジンです。暗号文、パスフレーズ、鍵はどこにも送信されません — ネットワークタブが空のままであることを確認したり、インターネットから切断してオフラインで復号したりできます。このローカル完結型の設計により、機密性のある暗号文をここに貼り付けても妥当だと言えますが、それでも本番の機密情報をどのオンラインツールでも扱うのは避けるべきです。
復号時のパスフレーズと生鍵の違いは何ですか?
これは秘密情報をどのように入力するかを決めます。データがパスフレーズから暗号化された場合(U2FsdGVkX1形式のものを含む)、「パスフレーズ」を選び、ツールに一致するKDFとソルトで鍵を導出させてください。正確な128/192/256ビットの鍵で暗号化された場合は「生鍵」を選び、そのバイト列を16進数またはBase64で貼り付けます — IVを、暗号文の先頭に付加された形か別途のいずれかで入力する必要がある場合もあります。パスフレーズのデータを生鍵で復号しようとしたり、その逆をしたりするのは、復号が失敗するよくある原因です。どちらの形式でも暗号文を作成するには、AES暗号化ツールを使ってください。

AES暗号化ツール — GCM・CBC・CTR対応

セキュリティツール

無料のAESオンライン暗号化ツール — AES-128/192/256、GCM/CBC/CTR、パスフレーズ(PBKDF2)または生鍵に対応。処理は100%ブラウザ内で完結し、外部にアップロードされません。

Bcrypt ハッシュ生成・検証ツール

セキュリティツール

bcrypt パスワードハッシュをオンラインで生成・検証。コスト調整、$2b$/$2a$/$2y$ プレフィックス対応。100% ブラウザ内で処理し、パスワードは一切送信されません。

HMAC ジェネレーター&署名検証ツール

セキュリティツール

無料のオンライン HMAC 生成・検証ツール。Text・Hex・Base64 の鍵で HMAC-SHA256/SHA1/SHA384/SHA512 を計算し、Hex/Base64/Base64URL で出力します。100% ブラウザ内で完結 —— 鍵はページから外に出ません。

JWT デコーダー — オンライン解析ツール

セキュリティツール

JWTトークンを無料のJWTデコーダーでオンラインデコード。ヘッダー、ペイロード、署名、有効期限、アルゴリズム、クレームを即座に検査できます。100%ブラウザ動作 — トークンはデバイスから外に出ません。登録不要、追跡なし。

JWT エンコーダー&ジェネレーター

セキュリティツール

無料のオンラインJWTジェネレーター&エンコーダー。ヘッダーとペイロードを組み立て、HS256、RS256、ES256で即座に署名できます。100%ブラウザ動作 — シークレットと鍵はデバイスから外に出ません。

無料 JWT シークレット生成ツール — HS256/384/512

セキュリティツール

HS256/384/512 向けの強力で RFC 準拠の JWT シークレットを生成。100% ブラウザ内で処理し、サーバーには一切送信されません。base64url・base64・hex で .env 用にコピー。