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

テキスト欄とパスフレーズ欄の 2 つだけです。「暗号化」は平文を U2FsdGVkX1 で始まる AES 暗号文に変え、「復号」はその暗号文を UTF-8 のテキストに戻します。処理はすべてページ内で完結し、ネットワークを切った状態でも往復を確認できます。

鍵はどこにも保存されません。パスフレーズと毎回ランダムなソルトから導出されるため、同じテキストと同じパスフレーズでも実行のたびに異なる文字列になります。

  1. 暗号化したいテキスト、または U2FsdGVkX1 で始まる既存の暗号文を上の欄に貼り付けます。
  2. ボタンの隣の欄にパスフレーズを入力します。これが唯一の秘密情報で、結果を読み戻すには同じパスフレーズが必要です。
  3. 「暗号化」または「復号」を押します。新しい結果は前の結果を置き換え、失敗した場合は古いテキストを残さず出力を消去します。
  4. 必要な場合は別のツールで確認します。openssl enc -d -aes-256-cbc -md md5 -a -pass pass:パスフレーズ でここで作った暗号文を復号できます。
  5. 次の実行の前に「クリア」を押して、テキスト・パスフレーズ・結果を空にします。

出力の正体

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

出力は Base64 で、先頭のバイト列をデコードすると Salted__、続いて 8 バイトのランダムなソルト、その後に暗号文が並びます。鍵と IV はパスフレーズとソルトから EVP_BytesToKey(MD5)で導出され、openssl enc がパスフレーズ暗号化に使う方式と同じです。

ソルトは実行のたびに新しくなるため、同じ文でも毎回異なる文字列になり、どちらも同じテキストに戻ります。双方向で確認済みです。openssl はこのページの出力を復号でき、このページは openssl enc -aes-256-cbc -md md5 の出力を復号できます。

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

アルゴリズムは AES-256-CBC で、コンテナに署名や認証タグはありません。パスフレーズの誤り、途中で切れた文字列、1 バイトの改変はすべて同じメッセージになります。ランダムな 6 か所を 1 文字ずつ改変したところ、5 件は失敗し、1 件は警告なしで読めないテキストを返しました。

鍵導出はパスフレーズに対する MD5 の 1 回だけで、PBKDF2 や Argon2 のような作業係数はありません。つまりパスフレーズそのものが弱点であり、このページは既存の AES データの再現と確認に向いていて、新しい秘密の保護には向いていません。

互換性と制限

入力も出力もテキストのみで、ファイルやバイナリ、16 進数の入力は扱いません。復号できるのは、このソルト付きパスフレーズコンテナを CBC モードで作った場合だけです。-nosalt の出力、-K と -iv を明示した出力、ECB など別のモードの出力、他のライブラリの出力は同じメッセージで失敗します。

200 KB のテキストは Chrome で約 15 ms で暗号化されます。数メガバイトを超える場合はローカルのコマンドラインツールが適しています。

最近使ったツール: