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

テキスト欄とパスフレーズ欄が1つずつあります。「暗号化」を押すと OpenSSL 形式のソルト付きコンテナができ、「復号」を押すと既存の DES 暗号文を読み戻せます。結果はボタンの下に表示されます。

処理はページ内の CryptoJS で完結し、テキストとパスフレーズは送信されません。DES は1970年代の56ビット暗号なので、このページは古い DES データを読む・再現するためのもので、新しい秘密の保護には向いていません。

  1. 上の欄に、暗号化したいテキスト、または U2FsdGVkX1 で始まる既存の DES 暗号文を貼り付けます。
  2. キー欄にパスフレーズを入力します。後で暗号文を読み戻すときも同じパスフレーズが必要です。どこにも保存されません。
  3. 「暗号化」を押します。出力は Base64 で、Salted__ の目印、8バイトのランダムなソルト、その後に暗号文が続きます。
  4. 読み戻すときは、同じ欄に暗号文を貼り付け、パスフレーズをそのままにして「復号」を押します。

出力の中身

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

出力は CryptoJS と openssl enc が作るコンテナです。8バイトの Salted__(Base64 では U2FsdGVkX1)、8バイトのランダムなソルト、その後に暗号文が続きます。DES は8バイトブロックの暗号で、CBC モードと PKCS#7 パディングを使うため、末尾のブロックで1〜8バイトが追加されます。2バイトと3バイトの入力はどちらも24バイトのコンテナになりました。

ソルトは実行のたびにランダムなので、同じテキストとパスフレーズでも毎回違う文字列になります。同じ出力になったら不具合です。

OpenSSL で出力を読む

鍵と IV は、パスフレーズとソルトから MD5 ベースの EVP_BytesToKey で導出します。これは openssl enc が -md md5 で使う導出と同じです。このページのコンテナは openssl enc -d -des-cbc -md md5 -a -k "パスフレーズ" で復号でき、その OpenSSL コマンドで作った暗号文はこのページに貼り付けて読み戻せます。両方向とも確認済みです。

DES の鍵は56ビットで、OpenSSL もこの鍵導出が非推奨だと警告します。それでもこのページがあえて旧方式を維持するのは、既存の DES データがこの方式を使っているためです。

失敗したとき、結果が保証しないこと

パスフレーズが違う場合、コンテナではないテキスト、改変された暗号文は、いずれもパディング検査で失敗します。ページは前の結果を残さず、出力を空にしてメッセージを表示します。入力欄かパスフレーズが空の場合も、実行前に同じように拒否します。

コンテナには MAC も認証タグもないため、復号できた値はデータであって、真正性の証明ではありません。DES は古いデータの読み出しや再現だけに使い、新しい用途には現代の認証付き暗号を使ってください。

最近使ったツール: