这些加密算法有什么区别?

mur*_*lai 10 php encryption algorithm mcrypt

有什么区别MCRYPT_RIJNDAEL_128,MCRYPT_RIJNDAEL_256,MCRYPT_BLOWFISH,等哪一个是最适合的网络数据传输?

Dam*_*mon 20

Rijandel是AES的另一个名称,AES是当前"一个很好的标准"算法.数字128或256是密钥长度.

Blowfish是一种较旧的64位分组密码(AES是128位分组密码).

你不能说他们中的任何一个都是"更好"或"更糟",因为它们都没有真正被打破,但一般来说AES应该更优越,大多数实现也更快.此外,最现代的CPU在硬件中支持AES,这将使其更快......因此没有理由使用AES.

对于密钥长度,128位实际上足以用于对称密码.除非您是贵国核武器代码的守护者,否则您将需要使用256位密钥.

请注意,如果要以合理的方式使用256位密钥,则需要大约40个字符的密码.这再一次表明,加密算法不是安全链中的薄弱环节,而是人类.

编辑:再想一想,对于256位密钥所需的密码长度,50-60个字符可能是更合理的猜测.英语每个字符的熵小于2位.让我们假设你使用一个更随机的字母和数字字符序列(一个仍然能够记住它,虽然......),所以也许我们每个字符有4-5位熵(非常乐观!).这将要求您输入51到64个字符,因此密码的熵大致与密钥匹配.

现在的问题是:我们中有多少人拥有50个字符的密码?:-)

更新:
截至2011年底,Rijndael/AES(Bogdanov,Khovratovich,Rechberger)存在关键恢复攻击,这不是"大多数理论上的"或"热闹的减少轮次"攻击之一.该攻击适用于全面的AES,比蛮力快4倍.因此,人们可能会认为Rijndael"被打破".
实际上,攻击迄今无关紧要.即使使用最短的支持密钥长度,攻击速度比蛮力快四倍也需要2 126次操作,即使使用大量硬件实现也是如此.但是,如果可以改进攻击,将来可能会发生变化.

  • “数字 128 或 256 是密钥长度。” 不。它定义了块大小!http://php.net/manual/en/function.mcrypt-encrypt.php (2认同)
  • @Damon"Rijndael,支持128,192和256位的块和密钥大小,但在AES中,块大小始终为128位." https://en.wikipedia.org/wiki/Block_size_%28cryptography%29在官方PHP文档编写中,您可以使用相关常量设置块大小. (2认同)