Blowfish による暗号化と復号

Blowfish(4〜56 バイト鍵)で CBC・CFB・OFB・ECB の暗号化と復号を実行。OpenSSL bf-cbc のパスフレーズ形式、または 16 進の鍵と IV に対応。無料でブラウザ内で動作します。

Blowfish はレガシーな暗号です。64 ビットブロックのため長いメッセージは誕生日攻撃(Sweet32)に弱くなります。新しいデータには AES を使ってください。

出力は Base64 の OpenSSL「Salted__」形式です(8 バイトのランダムなソルト+暗号文)。鍵と IV はパスフレーズとソルトから導出されるため、同じテキストでも毎回結果が変わります。同等のコマンド:

openssl enc -bf-cbc -md md5 -a -A -provider legacy -provider default -k '…'

すべてブラウザ内で実行されます。データがアップロードされることはありません。

Blowfish 暗号化・復号とは?

Bruce Schneier が 1993 年に発表した、64 ビットブロックと可変鍵長(4〜56 バイト)のブロック暗号 Blowfish でデータを暗号化・復号します。暗号化 / 復号 タブで方向を切り替えるため、自分の出力や OpenSSL bf-cbc のデータも復号できます。

Blowfish 暗号化・復号の使い方

  1. 暗号化 または 復号 タブを選びます。
  2. パスフレーズ(OpenSSL 互換) を選んでパスフレーズを入力するか、生の鍵 + IV(16 進) を選んで 4〜56 バイトの鍵と 8 バイトの IV を入力します。
  3. モード と パディング を選びます(CBC + PKCS#7 が OpenSSL の bf-cbc と一致します)。
  4. 平文または暗号文を入力してボタンをクリックし、結果をコピーします。

例

入力
Raw key 0000000000000000, mode ECB, padding None, hex plaintext 0000000000000000
出力
4ef997456198dd78

Schneier による最初の Blowfish テストベクター、Hex 出力。

Blowfish 暗号化・復号を使うべき場面

Blowfish を使うレガシーソフトウェアのデータの読み取りや作成、テストベクターの生成に使ってください。64 ビットブロックのため、大量のデータには向きません(Sweet32)。新規用途には AES を使います。bcrypt のパスワードハッシュは Blowfish をベースにしていますが暗号化データではなく、ここでは復号できません。

Blowfish 暗号化・復号の仕組み

Blowfish は鍵を 18 個の P 配列エントリと 256 エントリの S-box 4 個に展開し、8 バイトの各ブロックに 16 ラウンドの Feistel 構造を実行します。4〜56 バイトの任意の長さの鍵は、リファレンス実装と同様にバイト単位で P 配列に循環して適用されます(Eric Young の可変鍵テストベクターで検証済み)。パスフレーズモードでは、パスフレーズとランダムなソルトから 16 バイトの鍵と 8 バイトの IV を導出し(EVP_BytesToKey MD5 または PBKDF2-SHA256)、openssl enc -bf-cbc と互換の OpenSSL Salted__ 形式で書き出します。CBC/ECB は PKCS#7 パディングを使い、復号時に検証されます。

一般的な使用例

  • openssl enc -bf-cbc の出力を復号する
  • 珍しい長さの鍵で Blowfish のテストベクターを作成する
  • レガシーな PHP mcrypt や Java の Blowfish コードと相互運用する
  • 古典的なアルゴリズムで Feistel 暗号を教える

セキュリティ注意事項

Blowfish は破られていませんが、64 ビットブロックのため、1 つの鍵で数ギガバイトを処理すると誕生日攻撃に弱くなります。新しいデータには AES を使ってください。

よくある質問

このページで復号できますか?

はい。復号 タブをクリックし、同じパスフレーズまたは鍵/IV と設定を入力して、暗号文を貼り付けてください。

bcrypt ハッシュを復号できますか?

いいえ。bcrypt は内部で Blowfish を使うだけの一方向のパスワードハッシュで、復号はできず、検証だけが可能です。

出力は OpenSSL と互換性がありますか?

はい。パスフレーズモードの結果は openssl enc -bf-cbc -md md5 -a -A -k <passphrase>(MD5 による EVP_BytesToKey)と同じで、PBKDF2-HMAC-SHA256 を選んだ場合は -pbkdf2 -iter N と同じです。復号には -d を付けます。対応するコマンドはパスフレーズ欄の下に表示されます。

どの鍵長が使えますか?

4〜56 バイト(16 進 8〜112 文字)です。パスフレーズモードは OpenSSL と同様に、常に 128 ビットの鍵を導出します。

他のカテゴリを見る