Skip to content

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

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

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

AES暗号化とは?

AES(Advanced Encryption Standard)は、Joan DaemenとVincent Rijmenが設計したRijndaelをもとに、2001年にNISTがFIPS 197として標準化した対称ブロック暗号です。128ビットの固定ブロック単位でデータを暗号化し、128、192、または256ビットの鍵を使用します。同じ鍵で暗号化と復号の両方を行います。HTTPS通信からディスク暗号化まで、あらゆるものを保護する現代暗号の主力です。

生のブロック暗号は16バイトのブロックを1つ攪拌するだけなので、AESは常にブロックを連結する「動作モード」の中で実行されます。このツールは、ブラウザのWeb Crypto APIがネイティブに提供する3つのモード — GCM、CBC、CTR — を用意しています。GCM(Galois/Counter Mode、NIST SP 800-38D)は推奨されるデフォルトです。認証機能を備えており、暗号文とともに128ビットの認証タグを生成するため、復号時に改ざんが検出されます。CBCとCTRは機密性のみを提供し、それ単体では暗号文が改ざんされたかどうかを判別できません。これが、TLS 1.3(RFC 8446)がすべてのCBC暗号スイートを廃止し、GCMのような認証付きモードを採用した理由です。

ここにECBモードがないことにお気づきかもしれませんが、これは意図的なものです。ECBは各ブロックを独立して暗号化するため、同一の平文ブロックは同一の暗号文ブロックを生成し、大規模な構造がそのまま透けて見えてしまいます — 有名な「ECBペンギン」の画像は、暗号化後も明らかにペンギンだとわかる形のままです。Web Crypto APIはまさにこの理由でECBを省略しており(実装されているのはAES-CBC、AES-CTR、AES-GCMのみ)、私たちも同様です。ECBを使用するレガシーシステムと相互運用する必要がある場合は、その弱点を再現するのではなく、移行すべき理由として捉えてください。

多くの人は32バイトのランダムな鍵ではなくパスフレーズを入力するため、このツールはPBKDF2-HMAC-SHA256を600,000回反復し、16バイトのランダムなソルトを使ってパスフレーズからAES鍵を導出します。これは現在のOWASPパスワード保管ガイダンス(および128ビット以上のソルトを要求するNIST SP 800-132)に準拠しています。これにより弱いパスフレーズへの総当たり攻撃は遅くなりますが、魔法のように安全になるわけではありません — このツールはモードを学び、暗号文をデバッグし、一時的な個人データを扱うためのものであり、専用の鍵管理システムに属すべき本番環境の機密情報を保護するためのものではありません。強力なパスフレーズを生成するにはランダムパスワード生成ツールを、真にランダムな鍵には秘密鍵生成ツールをご利用ください。

// AES-256-GCM 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 aesGcmEncrypt(plaintext, passphrase) {
  const enc = new TextEncoder();
  const salt = crypto.getRandomValues(new Uint8Array(16));
  const iv = crypto.getRandomValues(new Uint8Array(12));
  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, ['encrypt']);
  const ct = new Uint8Array(await crypto.subtle.encrypt(
    { name: 'AES-GCM', iv }, key, enc.encode(plaintext)));
  const packed = new Uint8Array([...salt, ...iv, ...ct]); // salt(16) | iv(12) | ct+tag
  return btoa(String.fromCharCode(...packed));            // self-contained Base64
}

主な機能

デフォルトでGCM認証付き暗号化

GCMは暗号文に加えて128ビットの認証タグを生成するため、1バイトでも変更されると復号が明確に失敗します。相互運用が必要な場合は、ワンクリックでCBCやCTRに切り替えられます。

自己完結型の暗号文

パスフレーズモードでは、ランダムなソルト、IV、タグを1つのBase64文字列にまとめるため、復号する側はパスフレーズさえあれば済みます — 別途コピーしたり紛失したりするフィールドはありません。

パスフレーズまたは生鍵

パスフレーズを入力する(PBKDF2-HMAC-SHA256で600,000回反復して変換)か、正確な128/192/256ビットの鍵を16進数またはBase64で貼り付けられます。バイト数バッジがリアルタイムで長さを確認します。

OpenSSL互換の出力

OpenSSLモードをオンにすると、openssl encコマンドやCryptoJSが読み取れるSalted__形式を出力し、対応するCLIコマンドをリアルタイムで表示するので、ターミナルで再現できます。

100%ブラウザ内で完結

すべてのバイトはWeb Crypto APIを使ってローカルで暗号化されます。ネットワークタブを開いても何もページから出ていくことはなく、オフラインでも動作します。

Base64またはHex出力

対象システムが求めるエンコーディングで結果をコピーでき、セグメント内訳表示でソルト、IV、暗号文、タグの長さを確認できます。

AES暗号化の例

GCM + パスフレーズ(自己完結型・非決定的)

素早い茶色の狐がのろまな犬を飛び越える。
ソルト(16B)+ IV(12B)+ 暗号文 + タグ(16B)をBase64エンコード — 実行するたびに異なる値になります

モードをGCM、鍵長を256、鍵の種類をパスフレーズにし、パスフレーズをhunter2にすると、この文は単一の自己完結型Base64文字列に暗号化されます。同じ文を2回暗号化すると、まったく異なる2つの出力が得られます — これは意図的な仕様です。パスフレーズモードでは暗号化のたびに新しい16バイトのソルトと新しい12バイトのIVが生成されるため、同一の平文が同一の暗号文を生み出すことはなく、観測者は2つのメッセージが同じ内容かどうかを判別できません。出力の下にあるセグメント表示は正確な構成を示します — ソルト、次にIV、そして128ビットのGCMタグが付加された暗号文です。復号する側はパスフレーズと同じモード・鍵長さえあれば復号できます — ソルト、IV、タグはすべて文字列の内部に含まれています。

OpenSSL互換出力(CBC + パスフレーズ)

Attack at dawn!
U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=

モードCBC、鍵の種類パスフレーズ、パスフレーズcorrect-horse、KDFにPBKDF2、反復回数10,000でOpenSSL互換モードをオンにします。すると、ツールはOpenSSLのSalted__形式を出力します — Base64は常にU2FsdGVkX1で始まり、これは8バイトのSalted__ヘッダーをBase64エンコードしたものです。毎回新しいランダムな8バイトのソルトが生成されるため、正確な文字列は実行のたびに変わりますが、どの出力もコマンドラインで次のように復号できます: echo 'U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -pass pass:correct-horse -base64 -A — これはAttack at dawn!を出力します。CryptoJSや古いOpenSSL 1.0.2以前と一致させるには、PBKDF2の代わりにEVP-MD5を選んでください。なお、openssl encにはGCMサポートがないため、OpenSSLモードはCBC専用です。

AESでテキストを暗号化する方法

  1. 1

    モードと鍵長を選ぶ

    モードはGCM(推奨)のまま、鍵長は256のままにしておくのが最も適切なデフォルトです。対象のシステムが要求する場合のみ、CBCまたはCTRに切り替えてください。

  2. 2

    パスフレーズか生鍵かを選ぶ

    鍵の種類はパスフレーズのままにして強力なパスフレーズを入力するか、生鍵に切り替えて正確な128/192/256ビットの鍵を16進数またはBase64で貼り付けてください。バイト数バッジで生鍵の長さが正しいかを確認できます。

  3. 3

    暗号化するテキストを入力する

    平文を入力または貼り付けてください。暗号化は入力と同時に自動的に実行され、すべてブラウザ内で完結します — ボタンの往復もアップロードも不要です。

  4. 4

    自己完結型の暗号文をコピーする

    右側のBase64の結果には、ソルト、IV、認証タグがすでに含まれています。セグメント表示でバイト構成を確認してから「コピー」をクリックしてください。対象システムが16進数を必要とする場合は、出力エンコーディングをHexに切り替えます。

  5. 5

    必要なときに復号する

    暗号文、パスフレーズ、同じモードと鍵長を相手に渡すか、AES復号ページを開いて自分で復号してください。

AES暗号化でよくある間違い

パスフレーズと生鍵を混同する

生鍵は正確に16、24、または32バイトのランダムなデータでなければなりません(16進数またはBase64で入力)。パスフレーズは任意のテキストで、まずKDFによって変換される必要があります。「生鍵」を選んで人間が読めるパスフレーズを貼り付けると、長さエラーになるか、弱い鍵が生成されます。

✗ 誤り
Key type: Raw key
Key (hex): correct horse battery staple   (not hex, not 32 bytes)
✓ 正しい
Key type: Passphrase
Passphrase: correct horse battery staple   (stretched with PBKDF2)

同じ鍵でIVを再利用する

IVは同じ鍵のもとでメッセージごとに一意でなければなりません。再利用はGCMでは致命的で(認証鍵が漏洩する可能性があります)、CBCとCTRでは機密性が崩れます。ツールに毎回新しいランダムIVを生成させてください。

✗ 誤り
// same key, same IV for two messages
encrypt(key, iv, a); encrypt(key, iv, b);
✓ 正しい
// fresh random IV each time (the default)
encrypt(key, randomIV(), a);

ソルト、IV、タグを失う

暗号文のバイトだけをコピーして、先頭のソルト/IVや末尾のGCMタグを取りこぼすと、そのデータは二度と復号できなくなります。文字列の途中だけでなく、自己完結型の文字列全体を保持してください。

✗ 誤り
stored = ciphertext              // salt + IV + tag thrown away
✓ 正しい
stored = salt + iv + ciphertext + tag   // the full Base64 string

GCM出力が毎回同じになると期待する

GCM(そしてパスフレーズモード全般)はランダムなソルトとIVを使うため、同じテキストでも実行のたびに異なるBase64文字列に暗号化されます。これはバグではなくセキュリティ機能です — 盗聴者が2つの暗号文が同じメッセージを暗号化したものかどうかを判別できないようにするためです。

✗ 誤り
assert(encrypt(msg) === encrypt(msg))   // fails — and should
✓ 正しい
assert(decrypt(encrypt(msg)) === msg)   // this is what must hold

AES暗号化でできること

AESモードの挙動を学ぶ
同じ入力でGCM、CBC、CTRを切り替えて、認証、IVの長さ、暗号文サイズがどう変わるかを確認しましょう。NIST SP 800-38Dが実際に何を規定しているかを体験的に理解する方法です。
他システムが読める暗号文を作る
OpenSSLのSalted__形式(または生鍵とIVの組み合わせ)で出力を生成すれば、opensslや暗号ライブラリを使うバックエンド、スクリプト、チームメンバーが問題なく復号できます。
短いメモやスニペットを暗号化する
デバイス間で移動中の復元フレーズや、サポートチケットに含まれるスニペットなど、一時的な個人テキストを、自分だけが知るパスフレーズで保護しましょう。規制対象や本番の機密情報には使わないでください。
暗号化フォーマットを試作する
コードを書く前に、ここでソルト/IV/タグの構成やKDF設定を固め、セグメント内訳表示でバイト順と長さを確認しましょう。
テストベクターを生成する
固定のパスフレーズとモードで既知の暗号文を作成し、自分の復号テストに利用したうえで、AES復号ページで往復動作を検証しましょう。

AESのモードと鍵導出

GCM(Galois/Counter Mode) — 認証付き、推奨
機密性に加えて128ビットの認証タグ(NIST SP 800-38D)を提供します。暗号化ごとにランダムに生成される96ビット(12バイト)のIVを使用し、暗号化・復号ともに並列化しやすいのが特徴です。絶対に破ってはいけない唯一のルールは、同じ鍵でIVを再利用しないことです。SP 800-38Dは1つの鍵に対してランダムに生成できるIVを約2^32個までに制限しており、再利用すると2つの平文のXORが漏洩し、タグを保護する認証鍵まで露呈しかねません。ほぼすべての用途に最適です。
CBC(Cipher Block Chaining) — 機密性のみ
各ブロックはランダムな16バイトのIVを使い、直前の暗号文ブロックとXORされます。組み込みの認証機能はないため、暗号化してからMACを付ける方式(encrypt-then-MAC、例えばHMAC生成ツール)と組み合わせる必要があり、歴史的にパディングオラクル攻撃(Vaudenay、EUROCRYPT 2002)に弱いことが知られています。OpenSSLや古いシステムとの相互運用のためにここで提供しています。
CTR(Counter) — 機密性のみ、ストリーム的
カウンターを暗号化することでAESをストリーム暗号に変える方式で、パディングなしで任意のバイト長を扱え、ブロックは自由に並列化できます。CBCと同様、それ単体では完全性を提供せず、同じ鍵でカウンター/IVを再利用すると致命的です。ランダムアクセスやストリーミングのセマンティクスが必要な場合に有用です。
ECB — 提供していません(意図的な設計)
Electronic Codebookは各ブロックを独立して暗号化するため、同一の平文ブロックは同一の暗号文ブロックを生成し、パターンが漏れてしまいます — 悪名高い「ECBペンギン」です。Web Crypto APIは意図的にこれを実装しておらず、私たちも同様です。レガシーな相手がECBを要求する場合は、それを再現すべきフォーマットではなく、修正すべきバグとして扱ってください。
鍵導出:600,000回、10,000回、1回の反復の違い
デフォルトのパスフレーズモードでは、このツールはOWASPに準拠し、16バイトのソルトとともにPBKDF2-HMAC-SHA256を600,000回反復します(同じSHA-256ハッシュを数十万回適用するイメージです)。OpenSSL互換モードでは、PBKDF2はデフォルトでわずか10,000回反復(openssl encのデフォルト)であり、CryptoJSや古いOpenSSLが使うレガシーなEVP_BytesToKey KDFはMD5を1回だけ適用します — 桁違いに弱いものです。反復回数が多いほど、推測1回あたりの総当たり攻撃が遅くなります。これが最新のデフォルトがはるかに高く設定されている理由です。Argon2やscryptはさらに強力ですが、Web Cryptoの一部ではないためここでは対象外です。パスワード保管にはOWASPに従い、Argon2idを優先してください。

AES暗号化のベストプラクティス

相手が要求しない限りGCMを優先する
認証付き暗号化は、CBCやCTRが黙って見逃してしまう改ざんを検出します。相互運用のためだけにCBCやCTRに切り替え、その場合はMACを追加してください。
メッセージごとに新しいランダムIVを使う
このツールは自動的にこれを行います。IVを手動で上書きする場合は、同じ鍵で決してIVを再利用しないでください — GCMでは再利用は致命的であり、CBCでは意味論的安全性が崩れます。
強力なパスフレーズと真にランダムな鍵を選ぶ
PBKDF2は総当たり攻撃を遅くしますが、弱いパスフレーズを救うことはできません。パスワード生成ツールで長いパスフレーズを生成するか、秘密鍵生成ツールで真にランダムな鍵を生成してください。
ソルト、IV、タグを暗号文と一緒に保管する
これらは秘密ではありませんが、なければ復号は失敗します。このツールの自己完結型フォーマットは3つすべてをまとめています。生鍵・ベア暗号文モードを使う場合は、IVを別途コピーし、暗号文と一緒に保管してください。
本番や規制対象の機密情報をオンラインツールで暗号化しない
完全にクライアントサイドであっても、ブラウザツールは学習、デバッグ、個人的な一時利用のためのものです。本当の機密情報は、監査済みの鍵取り扱いとローテーションを備えた、検証済みの鍵管理システムに属すべきです。AES-256自体は強力であり、NSAのCNSA 2.0スイートでTOP SECRETまで承認されていますが、実際の突破は暗号方式ではなく実装ミスから生じます。

AES暗号化に関するFAQ

テキストをオンラインで暗号化するのは安全ですか?
このツールでは暗号化処理そのものが完全にブラウザ内で行われます — テキスト、パスフレーズ、鍵がサーバーに送信されることはなく、ネットワークタブを確認すればそれを確認できます。そのため学習、デバッグ、一時的な個人データの暗号化には安全です。本番環境の機密情報、規制対象データ、長期的な鍵管理が必要なものには適していません。これはどのオンラインツールにも当てはまることです — ブラウザページでは監査済みの鍵保管、ローテーション、アクセス制御を提供できません。使い捨てや個人的な内容はここで暗号化し、本当の機密情報は専用のシステムで管理してください。
鍵なしでAESを復号できますか?
できません。AESには既知の実用的な破り方が存在しないため、鍵やパスフレーズがなければ近道はなく、攻撃者は鍵を一つずつ試すしかありません。AES-256には2^256通りの鍵の組み合わせがあり、1秒間に1兆の1兆倍の推測を行ったとしても、意味のある割合を探索するには宇宙の年齢をはるかに超える時間が必要です。実際のリスクは暗号方式そのものではなく、弱いパスフレーズ、IVの再利用、鍵の漏洩、あるいは作りの甘いシステムのパディングオラクルです。強力なパスフレーズを選べば、これらのリスクはいずれも当てはまりません。鍵なしで「AESを復元できる」と謳うものは、詐欺だと考えてください。
GCMとCBC — どちらのモードを使うべきですか?
GCMを使ってください。機密性に加えて組み込みの128ビット認証タグが得られるため、暗号文の1バイトでも改ざんされると、破損データを黙って返す代わりに復号が失敗します。CBCはデータを隠すだけで、それ単体では改ざんを検出できず、パディングオラクル脆弱性の長い歴史があります(Vaudenay、EUROCRYPT 2002)。これがTLS 1.3(RFC 8446)がすべてのCBC暗号スイートを削除した理由です。ここでCBCを選ぶ正当な理由は、OpenSSLのencコマンドのような既存システムとの相互運用性(GCM非対応)だけです。
AES-128とAES-256 — 256にする価値はありますか?
どちらも安全とみなされています。AES-128は破られておらず、わずかに高速です。AES-256はより大きな鍵とより大きなセキュリティマージンを持ち、NSAのCNSA 2.0スイートでTOP SECRETまでの情報に承認されているサイズであるため、賢明なデフォルトと言えます。コストはわずかです — ブロックあたり数ラウンド追加されるだけです。非常にホットなパスを最適化しているのでない限り、AES-256で暗号化してください。追加のセキュリティ余裕は実質的に無料で得られます。
ここで暗号化するとデータはアップロードされますか?
されません。すべての暗号化はブラウザのWeb Crypto API(crypto.subtle)を通じてローカルで実行されます。これはブラウザがHTTPSに使用しているのと同じ監査済みの実装です。入力した内容はどこにも送信されません — 開発者ツールのネットワークパネルを開いて何かを暗号化し、リクエストが一件も発生しないことを確認できますし、インターネットから切断してもツールは動作し続けます。SubtleCryptoはセキュア(HTTPS)なコンテキストでのみ利用可能であることも、この保証を支えている理由の一つです。
パスフレーズと鍵の違いは何ですか?
鍵とは、正確に128、192、または256ビットのランダムなデータのことです — AES-256の場合は32バイトの生データで、通常は16進数またはBase64で表記されます。パスフレーズは任意の長さの人間が入力するテキストであり、それ自体は鍵ではありません — 鍵導出関数によって鍵へと変換する必要があります。このツールはパスフレーズモードで、PBKDF2-HMAC-SHA256、600,000回の反復、ランダムなソルトを使ってこれを自動的に行います。両者を混同すること — パスフレーズを生鍵欄に貼り付けたり、その逆をしたりすること — は、2つのシステムの暗号文が一致しない最も一般的な原因の一つです。(暗号化ではなく署名付きトークンについては、JWTエンコーダーをご覧ください。)
OpenSSLやCryptoJSが復号できるように暗号化できますか?
できます。OpenSSL互換モード(AES-CBCとパスフレーズ)をオンにすると、ツールはopenssl encコマンドやCryptoJSが理解できるSalted__形式を出力し、対応するopensslコマンドをそのまま表示します。使用する鍵導出関数を選んでください — 最新のOpenSSL向けにはPBKDF2(openssl -pbkdf2のデフォルトは10,000回反復)、-pbkdf2を使わないOpenSSL 1.1以降向けにはEVP-SHA256、CryptoJSやOpenSSL 1.0.2以前向けにはEVP-MD5です。逆に他の人の暗号文を読むには、AES復号ツールを使ってください。

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

セキュリティツール

AESをオンラインで復号 — GCM/CBC/CTR、パスフレーズまたは生鍵に対応し、OpenSSLとCryptoJSの「U2FsdGVkX1」形式を自動検出します。処理は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 用にコピー。