MCRYPT_RIJNDAEL_128
、MCRYPT_RIJNDAEL_256
和MCRYPT_BLOWFISH
有什么区别?在Web数据传输中哪一个最适合使用?
MCRYPT_RIJNDAEL_128
、MCRYPT_RIJNDAEL_256
和MCRYPT_BLOWFISH
有什么区别?在Web数据传输中哪一个最适合使用?
Rijandel是当前的“优秀标准”算法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已经被“破解”了。
实际上,目前来看这种攻击是不相关的。即使采用最短支持的密钥长度,比暴力破解快四倍的攻击需要2126 次操作,即使通过大规模硬件实现也是不切实际的。但如果攻击得到改进,将来情况可能会有所改变。
openssl_random_pseudo_bytes(32)
可以为您提供256位密码学上足够随机的比特,这恰好是AES-256中的最大密钥大小。它可以安全地存储为base64编码。 - Charles关于MCRYPT_RIJNDAEL_128和MCRYPT_RIJNDAEL_256,有人回答说"数字128或256是密钥长度",这是不正确的。这些数字指的是块大小,而不是密钥长度。然而,两种实现(使用128位或256位的块大小)都可以接受128位或256位的密钥。
这取决于您想要的答案类型:实现方面的差异仅涉及编程,而设计方面的差异通常是相当详细的数学证明。解释几种加密算法之间复杂的设计差异可能超出了本网站的范围。此外,每个算法都有弱点,有些已知,有些未知。现有算法中特定的弱点通常会导致它们被淘汰,但也可以找到一些方法来规避它们(经典案例:DES存在一些子集密钥,导致代码容易被破解。解决方法是不使用那些密钥)。
RSA是一种非对称加密算法,最大密钥长度为2048,用于2030年提出。AES是一种对称算法,最大密钥长度为256位,用于2015年提出。Serpent加密算法也是一种对称算法,密钥长度为256位,用于2015年提出。