AES暗号化ツール — GCM・CBC・CTR対応
無料のAESオンライン暗号化ツール — AES-128/192/256、GCM/CBC/CTR、パスフレーズ(PBKDF2)または生鍵に対応。処理は100%ブラウザ内で完結し、外部にアップロードされません。
詳細オプション
同じ鍵でIVを再利用しないでください。空欄のままにすると安全なランダムIVが生成されます。
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
モードと鍵長を選ぶ
モードはGCM(推奨)のまま、鍵長は256のままにしておくのが最も適切なデフォルトです。対象のシステムが要求する場合のみ、CBCまたはCTRに切り替えてください。
- 2
パスフレーズか生鍵かを選ぶ
鍵の種類はパスフレーズのままにして強力なパスフレーズを入力するか、生鍵に切り替えて正確な128/192/256ビットの鍵を16進数またはBase64で貼り付けてください。バイト数バッジで生鍵の長さが正しいかを確認できます。
- 3
暗号化するテキストを入力する
平文を入力または貼り付けてください。暗号化は入力と同時に自動的に実行され、すべてブラウザ内で完結します — ボタンの往復もアップロードも不要です。
- 4
自己完結型の暗号文をコピーする
右側のBase64の結果には、ソルト、IV、認証タグがすでに含まれています。セグメント表示でバイト構成を確認してから「コピー」をクリックしてください。対象システムが16進数を必要とする場合は、出力エンコーディングをHexに切り替えます。
- 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を復号できますか?
GCMとCBC — どちらのモードを使うべきですか?
AES-128とAES-256 — 256にする価値はありますか?
ここで暗号化するとデータはアップロードされますか?
パスフレーズと鍵の違いは何ですか?
OpenSSLやCryptoJSが復号できるように暗号化できますか?
関連ツール
すべてのツールを見る →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 用にコピー。