之前我们简单了解了DES加密算法,它是一种典型的分组加密算法,而在众多加密算法中,有一个和它类似,但是却比它的加密速度更快的加密算法——Blowfish加密算法。

Blowfish算法

什么是Blowfish加密算法?

Blowfish加密算法是一个64位分组及可变密钥长度的对称密钥分组密码算法,可用来加密64比特长度的字符串。Blowfish加密算法具有加密速度快、紧凑、密钥长度可变、可免费使用等特点,已被广泛使用于诸多领域。

Blowfish算法流程

Blowfish和DES一样,使用的是feistel密码(费斯妥密码)来进行分组加密。blowfish的分组块大小是64bits,可变密钥长度可以从32bits到448bits不等。

Blowfish

Blowfish需要进行16轮的feistel加密操作,大概的流程就是将P(原始数据)分成左右两部分,先拿左边的部分和Kr 做异或操作,得出的结果调用F函数,最后将F函数的输出结果和右半部分进行异或操作。调换左右部分的位置,继续进行这样的操作,总共进行16轮就得到了最终的加密结果。

Blowfish算法中的F函数需要用到4个S-box,S-box的作用就是将8bits转换成为32bits。4个S-box的数组也按照上面的流程来进行生成,从而得到最终的S-box。

Blowfish算法的特点

  • 快速:Blowfish在32位微处理器中的加密速率为每个字节26个时钟循环。
  • 紧凑:Blowfish可以在不到5kb的内存中执行。
  • 简单:Blowfish只使用基本运算,如加法、异或和表格查阅,因此很容易设计与实现。
  • 安全:Blowfish是变长密钥的,最长448位,使其既灵活又安全。

Blowfish算法

Blowfish算法的缺点

Blowfish使用64位块大小(与AES的128位块大小相比)使它容易受到生日攻击,特别是在HTTPS这样的环境中。Blowfish的块只有64bits,比较小,所以建议不要使用Blowfish来加密大于4GB的文件。

如果Blowfish算法只进行一轮加密的话,容易受到反射性弱键的已知明文攻击。但是在实现使用中一般是16轮加密,所以不容易受到这种攻击。但是Blowfish算法的发明人布鲁斯·施耐尔(Bruce Schneier)还是建议大家迁移到Blowfish的继承者Twofish(双鱼算法)去。

免责声明:素材源于网络,如有侵权,请联系删稿。