TripleDES とパスフレーズでテキストを暗号化し、互換性のある CryptoJS の暗号文から元のテキストを戻します。暗号文は Base64 の Salted__ コンテナで、OpenSSL の Triple DES と相互に読み書きできます。
ブラウザ内でローカルに実行このページはテキストを Base64 の TripleDES 文字列に変換し、その文字列をテキストに戻します。内容を貼り付け、パスフレーズを入力して「暗号化」または「復号」を押すと、ボタンの下の欄に結果が出ます。処理はブラウザー内で完結し、貼り付けた内容は送信されません。
出力は CryptoJS が書くコンテナ形式です。Base64 をデコードすると、先頭が 8 文字の Salted__、続いて 8 バイトのランダムなソルト、そのあとに暗号文が並びます。OpenSSL のコマンドラインが Triple DES で書く形と同じなので、互いの出力を読み合えます。
結果をデコードすると 3 つの部分に分かれます。ASCII の Salted__ という 8 文字、ブラウザーの乱数による 8 バイトのソルト、そして 8 バイトのブロック単位で PKCS#7 パディングを付けた暗号文です。31 文字の入力なら暗号文は 48 バイト、1 文字の入力なら 8 バイトになります。
ソルトは押すたびに新しくなるため、同じテキストと同じパスフレーズでも Base64 は毎回変わります。2 回の実行を見比べても、入力が同じだった証拠にはなりません。パスフレーズはそのまま鍵ではなく、MD5 で 24 バイトの TripleDES 鍵と 8 バイトの IV に伸長されます。OpenSSL のコマンドラインが -md md5 で行うのと同じ手順です。結果はコマンドラインと同じように複数行に折り返され、改行の有無にかかわらず読み戻せます。
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 で書き直してください。
パスフレーズの間違い、Base64 の 1 文字の書き換え、暗号文のつもりで貼った普通のテキストは、どれも同じ結末になります。出力が消え、3 つの可能性を並べたメッセージが 1 つ出ます。どれだったかは特定できません。鍵を判断する前にパディングの検査で失敗するためです。入力が空のときとパスフレーズが空のときは、それぞれ別のメッセージになります。
TripleDES はレガシーな方式です。8 バイトのブロックに 3 つの DES 鍵を使い、新しい設計からは外れ、すでに保存されているデータのために残っています。このページはそのデータを読むとき、あるいは互換の値を作るときに使ってください。新規には AES を使ってください。そして往復が成功したことはパスフレーズが一致した証明にすぎません。誰が書いた文字列か、平文を信頼してよいかまでは示しません。