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

このページはテキストを Base64 の TripleDES 文字列に変換し、その文字列をテキストに戻します。内容を貼り付け、パスフレーズを入力して「暗号化」または「復号」を押すと、ボタンの下の欄に結果が出ます。処理はブラウザー内で完結し、貼り付けた内容は送信されません。

出力は CryptoJS が書くコンテナ形式です。Base64 をデコードすると、先頭が 8 文字の Salted__、続いて 8 バイトのランダムなソルト、そのあとに暗号文が並びます。OpenSSL のコマンドラインが Triple DES で書く形と同じなので、互いの出力を読み合えます。

  1. 保護したいテキストを上の欄に貼り付けます。読み戻したいときは Base64 の文字列を貼り付けます。
  2. 鍵の欄にパスフレーズを入力します。暗号化と復号には同じパスフレーズが必要で、空のままでは誰も開けない文字列を作らないよう、入力が求められます。
  3. 「暗号化」でテキストから Base64 へ、「復号」で Base64 からテキストへ進みます。結果はボタンの下の欄に表示され、状態行は問題が起きたときだけ使われます。
  4. 「コピー」で結果全体をクリップボードに入れます。手で選択してもかまいません。「クリア」は入力欄・パスフレーズ・結果を次の作業のために空にします。
  5. パスフレーズは文字列と一緒に保管してください。失うと文字列は開けません。このページに復元も初期化も鍵の預かりもありません。

Salted__ コンテナ、OpenSSL との相互運用、復号に失敗したときの意味

Base64 の結果の中身

結果をデコードすると 3 つの部分に分かれます。ASCII の Salted__ という 8 文字、ブラウザーの乱数による 8 バイトのソルト、そして 8 バイトのブロック単位で PKCS#7 パディングを付けた暗号文です。31 文字の入力なら暗号文は 48 バイト、1 文字の入力なら 8 バイトになります。

ソルトは押すたびに新しくなるため、同じテキストと同じパスフレーズでも Base64 は毎回変わります。2 回の実行を見比べても、入力が同じだった証拠にはなりません。パスフレーズはそのまま鍵ではなく、MD5 で 24 バイトの TripleDES 鍵と 8 バイトの IV に伸長されます。OpenSSL のコマンドラインが -md md5 で行うのと同じ手順です。結果はコマンドラインと同じように複数行に折り返され、改行の有無にかかわらず読み戻せます。

OpenSSL と相互に読み書きできる

OpenSSL 1.1.1k で実測しました。openssl enc -d -des-ede3-cbc -md md5 -a -k はこのページの文字列を復号でき、openssl enc -des-ede3-cbc -md md5 -a -k が書いた文字列はこのページで復号できます。ページの文字列から取り出したソルトをコマンドラインに渡すと、このページが導出するのと同じ 24 バイトの鍵と 8 バイトの IV が表示され、その文字列がバイト単位で再現されました。

このオプションは形式の一部で、細かい話ではありません。-md sha256 や -pbkdf2 で書かれた文字列は、別の鍵導出になるためこのページでは拒否されます。データが壊れているわけではなく、別の導出で閉じられているだけです。書いたツールで復号するか、パスフレーズがあるうちに -md md5 で書き直してください。

復号に失敗したとき、TripleDES をまだ使う場面

パスフレーズの間違い、Base64 の 1 文字の書き換え、暗号文のつもりで貼った普通のテキストは、どれも同じ結末になります。出力が消え、3 つの可能性を並べたメッセージが 1 つ出ます。どれだったかは特定できません。鍵を判断する前にパディングの検査で失敗するためです。入力が空のときとパスフレーズが空のときは、それぞれ別のメッセージになります。

TripleDES はレガシーな方式です。8 バイトのブロックに 3 つの DES 鍵を使い、新しい設計からは外れ、すでに保存されているデータのために残っています。このページはそのデータを読むとき、あるいは互換の値を作るときに使ってください。新規には AES を使ってください。そして往復が成功したことはパスフレーズが一致した証明にすぎません。誰が書いた文字列か、平文を信頼してよいかまでは示しません。

最近使ったツール: