対称暗号の暗号化・復号:AES / DES / RC4 / Rabbit / TripleDES

5種類のパスフレーズ暗号から選び、テキストを貼り付けて「暗号化」を押すと暗号文が得られます。CryptoJS の暗号文を貼り付けて「復号」を押せば元のテキストに戻ります。出力は OpenSSL 形式のソルト付きコンテナで、入力が外部に送信されることはありません。

ブラウザ内でローカルに実行

テキストを暗号化・復号する手順

対称暗号の暗号化と復号を1画面で行えます。パスフレーズを使う AES・DES・RC4・Rabbit・TripleDES の5種類からアルゴリズムを選び、テキストを貼り付けて「暗号化」を押すと結果が下に表示されます。同じパスフレーズでその結果を貼り付けて「復号」を押せば元のテキストに戻ります。

暗号処理はページ内の CryptoJS で実行されます。テキストとパスフレーズはブラウザの外に出ないため、ネットワークが切れていても動作します。

  1. 上の入力欄にテキストを貼り付けるか入力します。既定は AES です。既存の暗号文を再現する場合だけ別のアルゴリズムを選びます。
  2. キー欄にパスフレーズを入力します。後で読み戻すときも同じパスフレーズが必要です。ここには何も保存されません。
  3. 「暗号化」を押します。出力は Base64 で、OpenSSL 形式のソルト付きコンテナを示す U2FsdGVkX1 で始まります。
  4. 元に戻すときは、同じ入力欄に暗号文を貼り付け、それを生成したアルゴリズムを選んで「復号」を押します。

出力の中身

ソルト付きコンテナとランダムなソルト

結果はすべて OpenSSL 形式のコンテナです。8バイトの Salted__(Base64 では U2FsdGVkX1)、8バイトのランダムなソルト、その後に暗号文が続きます。鍵と IV はパスフレーズとソルトから MD5 ベースの EVP_BytesToKey で導出され、これは openssl enc が -md md5 で使う導出と同じです。

ソルトがランダムなので、同じテキストと同じパスフレーズでも毎回異なる文字列になります。同じ出力が出たら不具合で、異なるのが正常です。

実際に使われる暗号

AES は aes-256-cbc、DES は des-cbc、TripleDES は des-ede3-cbc です。この3つは OpenSSL で復号できます(例:openssl enc -d -aes-256-cbc -md md5 -k "パスフレーズ")。RC4 は256ビット鍵で、openssl enc -rc4 が既定で導出する128ビットの倍なので、このコマンドでは読み戻せません。Rabbit は CryptoJS にしかなく、OpenSSL に対応する実装はありません。

AES・DES・TripleDES は PKCS#7 パディングを使う CBC モードのブロック暗号、RC4 と Rabbit はストリーム暗号なので、暗号文の長さは元のテキストと同じです。

パスフレーズが違う場合

AES・DES・TripleDES はパディング検査で失敗し、何も返しません。RC4 と Rabbit は有効な UTF-8 になることのほとんどないバイト列を返します。どちらの場合も、以前の平文を画面に残さず、失敗を表示して出力欄を空にします。

このコンテナには完全性の検査がありません(MAC も認証タグもありません)。そのため改変された暗号文は検出できず、誤ったパスフレーズと壊れたデータを区別できません。自動処理に復号結果を渡す前に、既知の小さなサンプルで照合してください。

このページでできないこと

扱えるのはテキストだけで、ファイルは対象外です。署名・検証・保存も行いません。履歴も鍵の保管もなく、再読み込みで結果は消えます。

DES・RC4・TripleDES は既存データとの互換性のために残しています。パスフレーズから導出した鍵による CBC モードは現代的な構成ではありません。新しい用途には AES-GCM や ChaCha20-Poly1305 を使ってください。このページではそれらは生成できません。

最近使ったツール: