Blowfish 加密与解密

用 Blowfish(4–56 字节密钥)加密或解密,支持 CBC、CFB、OFB 或 ECB。可使用 OpenSSL bf-cbc 口令格式或十六进制原始密钥和 IV,免费且在浏览器内运行。

Blowfish 是遗留算法:64 位分组使长消息易受生日攻击(Sweet32)。新数据请使用 AES。

输出为 Base64 编码的 OpenSSL “Salted__” 格式:8 字节随机盐后接密文。密钥和 IV 由口令和盐派生,因此同一段文本每次加密结果都不同。等效命令:

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

完全在浏览器中运行,您的数据不会被上传。

什么是 Blowfish 加密与解密?

使用 Blowfish 加密和解密数据,这是 Bruce Schneier 于 1993 年设计的分组密码,分组为 64 位,密钥长度可变(4–56 字节)。使用加密 / 解密标签页切换方向,这样你也可以解密自己的输出或来自 OpenSSL bf-cbc 的数据。

如何使用 Blowfish 加密与解密

  1. 选择加密或解密标签页。
  2. 选择口令(兼容 OpenSSL)并输入口令,或选择原始密钥 + IV(十六进制),使用 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 盒,然后对每个 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 没有被攻破,但在同一个密钥下处理几 GB 数据之后,它的 64 位分组易受生日攻击。新数据请优先使用 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 字节(8 到 112 个十六进制字符)。口令模式与 OpenSSL 一样,始终派生 128 位密钥。

探索更多分类