AES 暗号化・復号ツール

AES-256-GCM でテキストとファイルをブラウザ内で暗号化・復号。パスワードか鍵を直接指定でき、誤りは認証失敗として表示。アップロードしません。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
「パスワード」:入力したままの文字列を UTF-8 にし、毎回新しく作る 16 バイトのソルトとともに PBKDF2-HMAC-SHA256 を 600,000 回かけて 256 ビットの鍵にします。暗号文は v2: で始まります。「鍵を直接入力」:16・24・32 バイトの鍵を 16進数・Base64・テキスト(UTF-8 のバイト列)で入力し、そのまま AES の鍵に使います。暗号文に接頭辞は付きません。「生成」はランダムな 256 ビットの鍵を 16進数で入れます。鍵の形式が Base64 のときは Base64 で入れます。「表示」を押すと、入力したパスワードを確認できます。
テキストは UTF-8 として暗号化します。「ファイル…」を押すか、ファイルを欄にドロップすると、ファイルを暗号化できます。上限は 256 MB で、メモリに読み込んで処理し、結果は元の名前に .enc を付けたダウンロードボタンになります。入力中は暗号化しません。「暗号化」を押すか、Ctrl+Enter(Mac は ⌘+Enter)を押します。復号したテキストもこの欄に出ます。ツール内にフォーカスがあるときに Ctrl+L(⌘+L)を押すと、2 つの欄、パスワード、鍵、IV、AAD、選んだファイルを空にします。
暗号文を貼り付けます。v2: の接頭辞はあってもなくても読めます。Base64(標準と URL セーフのどちらの文字でも、パディングなしでも可)か 16進数で、空白と改行は無視します。接頭辞がないとき、パスワードモードは PBKDF2 200,000 回、次に 600,000 回の順で試します。「復号」を押すか、この欄で Ctrl+Enter(⌘+Enter)を押すと、テキストが平文欄に出ます。UTF-8 でないバイト列はダウンロードで渡します。「ファイル…」かドロップで、256 MB までの暗号化ファイルを復号できます。「出力」は、新しく暗号化するテキストを Base64 と 16進数のどちらで書くかを決めます。「コピー」はこの欄の内容をコピーします。

AES-256-GCM(NIST SP 800-38D)・パスワード:PBKDF2-HMAC-SHA256 600,000 回、毎回新しい 16 バイトのソルト・毎回新しい 12 バイトの IV・16 バイトの認証タグ・このタブ内で処理し、アップロードしません

詳しいガイドを読む AES 暗号化ツール:ブラウザでテキストを安全に暗号化・復号
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

例 1:パスワードで一文を暗号化

平文 見積書は金曜に送ります、パスワード correct horse battery staple で暗号化した一回分の出力です。

v2:7v4vi+LVN2PaU0TDRHSSeMduNrofoM62T63g/9tmX11FGSSR54Q3iG/C7Mtm6rUws+FU3HjW7SyBpiGLMypnoOpNINlqrPAtTHDylZw=

11 文字の平文は UTF-8 で 33 バイトなので、v2: の後ろの Base64 は 77 バイト(ソルト 16 + IV 12 + 暗号文 33 + タグ 16)です。もう一度暗号化すると、ソルトと IV が変わるため別の文字列になります。

例 2:鍵と IV を指定して結果を再現する

別の実装と突き合わせたいときは、鍵と IV を固定します。鍵の種類「鍵を直接入力」、形式 Base64、鍵 EBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8=(0x10〜0x2f の 32 バイト)、IV 欄 0f0e0d0c0b0a090807060504、平文 テスト用の平文です で暗号化すると、毎回次の出力になります。

LGnIgt1Hib6Tu03SeTvCFvdLB9EQ6s2tv6R7OtyM8NurwAV+Yu2fFGzbOQ==

43 バイトで、暗号文 27 バイトとタグ 16 バイトです(IV 欄を使うと IV は出力に含めません)。IV 欄は 16進数ちょうど 24 桁なら 12 バイト、それ以外はテキストの UTF-8 バイトとして読みます。固定 IV で暗号化するとツールは警告を出します。同じ鍵で IV を再利用すると GCM の安全性が崩れるためです(NIST SP 800-38D 第 8 章)。実データでは IV 欄を空にしてください。

エラー表示の意味

入力表示
例 1 の暗号文を別のパスワードで復号認証に失敗しました。パスワードか鍵が違う、または暗号文が改変・切り詰められています。
U2FsdGVkX1… で始まる暗号文これは OpenSSL enc または CryptoJS の出力です…
v2: を v3: に書き換え不明な暗号文バージョン「v3:」です。
暗号文の途中に全角文字が混入N 文字目の「…」は Base64 の文字ではありません。
「鍵を直接入力」のまま v2: の暗号文を復号パスワードで暗号化されています。鍵の種類を「パスワード」にしてください。

鍵は正しいのに復号結果が UTF-8 のテキストでない場合は、文字化けを表示せずダウンロードで渡します。

電子政府推奨暗号リストとの関係

CRYPTREC 暗号リスト(CRYPTREC LS-0001-2022R2、2026 年 3 月 30 日更新)の電子政府推奨暗号リストには、128 ビットブロック暗号として AES、認証付き秘匿モードとして GCM が載っており、GCM には「初期化ベクトル長は 96 ビットを推奨する」という注があります。このツールの IV はその 96 ビット(12 バイト)です。

個人情報保護委員会の Q&A 6-19 は、漏えい等報告が不要となる「高度な暗号化等の秘匿化」の例として、電子政府推奨暗号リストや ISO/IEC 18033 等に載った暗号技術を適切に実装することを挙げ、さらに復号鍵を暗号文と分けて管理するなど鍵管理の要件を示しています。暗号方式が要件に合っていても、パスワードを暗号文と同じメールで送れば鍵管理の要件は満たせません。パスワードは別の経路で伝えてください。

暗号文の形式と Python コード

  • パスワード:v2: + 「ソルト 16 | IV 12 | 暗号文 | タグ 16」の Base64(または16進数)。鍵は PBKDF2-HMAC-SHA256 を 600,000 回(OWASP Password Storage Cheat Sheet の値)で 32 バイトを導出します。
  • 接頭辞なし:同じ構成で、2026-09-30 より前にこのページが作ったもの(200,000 回)です。ツールは 200,000 回、次に 600,000 回を試すので、同じ構成で書く他のプログラムの出力も読めます。
  • 鍵を直接入力:「IV 12 | 暗号文 | タグ 16」。IV 欄を使ったときは「暗号文 | タグ」だけです。
  • ファイル:Base64 にしない同じバイト列で、パスワードモードは先頭が v2: の 3 バイトです。

次の Python コード(cryptography 45)はツールと相互に暗号化・復号できます。

import base64, os
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

def _key(password: str, salt: bytes, iterations: int) -> bytes:
    kdf = PBKDF2HMAC(algorithm=hashes.SHA256(), length=32, salt=salt, iterations=iterations)
    return kdf.derive(password.encode("utf-8"))

def encrypt(text: str, password: str) -> str:
    salt, iv = os.urandom(16), os.urandom(12)
    ct = AESGCM(_key(password, salt, 600_000)).encrypt(iv, text.encode("utf-8"), None)
    return "v2:" + base64.b64encode(salt + iv + ct).decode()

def decrypt(token: str, password: str) -> str:
    # "v2:" は 600,000 回、接頭辞なしは 2026-09-30 より前の形式(200,000 回)
    token = token.strip()
    iterations = 600_000 if token.startswith("v2:") else 200_000
    data = base64.b64decode(token.removeprefix("v2:"))
    salt, iv, ct = data[:16], data[16:28], data[28:]
    return AESGCM(_key(password, salt, iterations)).decrypt(iv, ct, None).decode("utf-8")

def decrypt_raw(token: str, key_hex: str) -> str:
    # 鍵を直接入力・IV 欄が空の出力:iv(12) | 暗号文 | タグ(16) の Base64 か16進数
    token = token.strip()
    is_hex = all(c in "0123456789abcdefABCDEF" for c in token)
    data = bytes.fromhex(token) if is_hex else base64.b64decode(token)
    return AESGCM(bytes.fromhex(key_hex)).decrypt(data[:12], data[12:], None).decode("utf-8")

OpenSSL と CBC の暗号文

openssl enc はこの形式を読めません。openssl-enc のマニュアルは CCM や GCM などの認証付き暗号モードに対応せず、今後も対応しないと明記しており、OpenSSL 3.6.1 に -aes-256-gcm を渡すと enc: AEAD ciphers not supported と返ります。

U2FsdGVkX1 で始まる文字列は「Salted__」の Base64 で、openssl enc か CryptoJS の AES.encrypt(テキスト, “パスフレーズ”) の出力です(通常 AES-256-CBC)。CBC には認証タグがないため、パスワードが違っても文字化けした結果が出ることがあります。このツールはこの形式を検出して案内します。復号には次のコマンドを使います(2026-09-30 に実行して確認)。

# openssl enc -pbkdf2 で暗号化したもの
openssl enc -d -aes-256-cbc -pbkdf2 -a -A -in message.txt
# CryptoJS 4.2.0 の AES.encrypt(テキスト, "パスフレーズ") で暗号化したもの
openssl enc -d -aes-256-cbc -md md5 -a -A -in message.txt

ほかの AES ツールとの違い(実測)

2026-09-30、デスクトップ版 Chromium で同じテキストを使い、ページが送るリクエストを確認しました。

  • Go Tools(go-tools.org):ブラウザ内で動作し、日本語版ページで暗号化したときの送信は Cloudflare のページ計測ビーコンだけでした。英語版で確かめたパスフレーズ方式は AES-GCM・PBKDF2 600,000 回で、このツールと同じバイト構成(接頭辞なし)です。その出力はこのツールでそのまま復号できました。
  • CoderTools(codertools.net):ブラウザ内で動作し、既定は CBC、鍵はテキストのまま使います。誤った鍵で復号すると結果欄が空になるだけで、メッセージは出ません。
  • Torinoa Tools:ブラウザ内で動作し、既定は AES-GCM です。暗号化時に入力内容を含む送信はありませんでした。

このツールは失敗の種類ごとにメッセージを出し、IV と追加データを指定する鍵直接入力、ファイルの暗号化に対応し、ページで解析タグや広告を読み込みません。

制限

  • GCM のみで、CBC・ECB・CTR は扱いません。openssl enc や CryptoJS の出力は上のコマンドで復号してください。
  • パスワードモードの形式は固定です(PBKDF2-HMAC-SHA256・600,000 回・16 バイトのソルト・追加データなし)。タグは常に 128 ビットです。
  • ファイルは 256 MB まで、全体をメモリで処理します。検証用ノート PC では 200 MB のファイルが約 0.8 秒、5 MB のテキストが約 1.7 秒(大半はテキスト欄の描画)でした。
  • ランダムな 96 ビット IV を使う場合、NIST SP 800-38D 第 8.3 節により同じ鍵での暗号化は 232 回までです。パスワードモードは毎回新しい鍵を導出します。
  • ファイル名は暗号化されません(見積書.pdf.enc から元の名前が分かります)。暗号化ファイル自体はファイル名を保存しません。
  • 弱いパスワードは暗号化しても弱いままです。パスワードジェネレーターで作り、復号したファイルはファイルハッシュチェッカーで SHA-256 を照合できます。

FAQ

AES のどのモードを使っていますか?

AES-GCM だけです。パスワードモードは AES-256-GCM で、鍵は PBKDF2-HMAC-SHA256 で導出します。鍵を直接入力するモードでは、鍵の長さに応じて AES-128・AES-192・AES-256 になります。GCM は 16 バイトの認証タグを付けるため、パスワード違いや改ざんがあると「認証に失敗しました」と表示し、文字化けした平文は出しません。

同じ平文とパスワードなのに、毎回違う暗号文になるのはなぜですか?

暗号化のたびに 16 バイトのソルトと 12 バイトの IV を新しく乱数で作るからです。NIST SP 800-38D は同じ鍵で IV を再利用しないことを求めており、新しいソルトからは新しい鍵が導出されます。どの暗号文も同じ平文に復号できます。

OpenSSL で復号できますか?

できません。openssl enc は GCM に対応しておらず、マニュアルには今後も対応しないと書かれています。このページの Python コードや Web Crypto API、AES-GCM に対応したライブラリで、下に書いたバイト構成どおりに復号してください。逆に openssl enc や CryptoJS の出力(U2FsdGVkX1 で始まる)を貼ると、ツールがそれと判定し、使うべき openssl コマンドを案内します。

テキストやパスワード、ファイルは送信されますか?

送信しません。暗号化と復号はブラウザのタブ内で Web Crypto API によって行います。入力内容は保存せず、URL にも入れず、このページは Google アナリティクスと AdSense を読み込みません。

このツールで暗号化すれば、個人データが漏えいしても報告不要になりますか?

それだけでは決まりません。個人情報保護委員会の Q&A 6-19 は、電子政府推奨暗号リスト等に載った暗号技術を適切に実装することに加えて、復号鍵を暗号文と分けて管理するなどの要件を挙げています。AES と GCM は同リストに載っていますが、パスワードの扱いは利用者側の管理になります。