在具有相同密钥长度的情况下,AES或Blowfish哪个更好?我们可以假设攻击者拥有强大的资源(软件、知识、金钱)来破解文件。
很可能是AES。Blowfish是Twofish的直接前身。Twofish是Bruce Schneier提交的竞赛作品之一,但被评判为不如一种名为Rijndael的作品,后者成为了AES标准。
有趣的是,在比赛中的某个时刻,所有参赛者都被要求表达他们对密码算法排名的看法。也许毫不意外的是,每个团队都认为自己的作品是最好的,但其他团队却统一选择将Rijndael评为第二好。
尽管如此,Blowfish和AES在基本目标上仍有一些基本区别,这可以(有人认为)使Blowfish在绝对安全性上具有优势。特别地,Blowfish试图通过使初始密钥设置变得相当缓慢来防止暴力破解(即穷举攻击)。对于普通用户而言,这几乎没有影响(仍不到1毫秒),但如果你在试图每秒尝试数百万个密钥以进行破解,则其中的差异就相当大了。
最终,我并不认为这是一个主要的优势。我通常会建议使用AES。我的下一个选择可能是Serpent、MARS和Twofish。Blowfish将在这些之后,虽然还有一些其他的密码算法我可能会推荐在Blowfish之前。
一个不常被承认的事实是块密码的块大小也是一个重要的安全考虑因素(虽然远不如密钥大小重要)。
Blowfish(以及大多数同一时代的块密码,如3DES和IDEA)的块大小为64位,这被认为对于现在普遍的大文件大小来说是不足的(文件越大,块大小越小,在密文中重复块的概率越高 - 而这些重复块在加密分析中极其有用)。
相反,AES的块大小为128位。仅考虑这个因素就足以证明使用AES而不是Blowfish是有理由的。
AES.
(我假设你指的是twofish,而不是更早且较弱的blowfish)
无论如何,AES和twofish都是很好的算法。然而,即使它们在技术上相等或twofish稍微领先,我仍会选择AES。
为什么?宣传。AES是政府加密的标准,因此数百万其他实体也使用它。一个有才华的密码分析师在找到AES中的缺陷时可以获得更多的“回报”,而在不太知名且使用较少的twofish中则不然。
在加密中,隐秘性并不能提供保护。越多的人审查、研究、探索和攻击一个算法,越好。你需要最经过“验证”的算法,现在就是AES。如果一个算法不受到强烈而持续的审查,那么你应该对它的强度信心较低。当然,twofish还没有被攻破。这是因为密码本身强大,还是因为没有足够多的人仔细研究它呢......但是
我知道这个答案违反了您的问题条款,但我认为您意图的正确答案很简单:使用允许您使用最长密钥长度的算法,然后确保选择一个非常好的密钥。大多数公认的算法(在加密和时间上)之间的性能差异被几个额外的密钥位数所压倒。
两种算法(AES和twofish)都被认为非常安全。这在其他答案中已经广泛涵盖。
然而,由于AES现在在2016年被广泛使用,因此它已经在几个平台上进行了专门的硬件加速,例如ARM和x86。虽然在硬件加速之前与twofish相比没有显着提高,但由于专用CPU指令,现在AES要快得多。