テキストとパスフレーズを入力し、「暗号化」か「復号」を押すと結果が下に出ます。同じパスフレーズで戻せるのは CryptoJS 互換の Rabbit 暗号文だけです。
ブラウザ内でローカルに実行テキスト欄とパスフレーズ欄の 2 つだけです。「暗号化」は平文を CryptoJS の Rabbit 暗号文に変え、「復号」はその暗号文を UTF-8 のテキストに戻します。処理はすべてページ内で完結します。
パスフレーズはどこにも保存されず、実行のたびに新しいランダムなソルトを使うため、同じテキストと同じパスフレーズでも暗号文は毎回変わります。
出力は CryptoJS がパスフレーズ方式で書き出すコンテナです。先頭に ASCII 8 バイトの Salted__(Base64 では U2FsdGVkX1)、続いて 8 バイトのランダムなソルト、その後に暗号文が並び、全体が Base64 で表されます。
128 ビットの鍵と 64 ビットの IV は、パスフレーズとソルトから MD5 ベースの EVP_BytesToKey で導出されるため、パスフレーズがそのまま鍵になるわけではありません。同じテキストでも実行ごとに暗号文が変わるのはソルトが毎回新しいためで、異常ではありません。
Rabbit は認証タグを持たないストリーム暗号で、このページは改ざんされた暗号文と正常な暗号文を区別できません。Base64 の 1 文字を変えると、復号結果の文字が変わるか、UTF-8 のデコードに失敗してエラー行が出ました(両方を確認)。どちらの場合も「改ざんされた」とは表示しません。
パスフレーズが違う場合は多くの場合 UTF-8 のデコードに失敗してエラー行が出ますが、読める文字列になったからといって改ざんされていない証拠にはなりません。重要な内容では平文のチェックサムと突き合わせてください。
ここで作った暗号文は、同じパスフレーズを使えば CryptoJS 3.x の Rabbit で読み戻せます。OpenSSL に Rabbit は実装されていないため、openssl enc では復号できません。
入力は貼り付けのみで、アップロードや URL 取得はありません(ファイル選択もありません)。テストでは Chrome で 200 KB を約 0.1 秒で暗号化し、その間のネットワークリクエストは 0 件、結果は次に実行するまで表示されたままでした。