php - 这些加密算法之间有什么区别?

标签 php algorithm encryption mcrypt

MCRYPT_RIJNDAEL_128MCRYPT_RIJNDAEL_256MCRYPT_BLOWFISH等有什么区别?哪一个最适合网络数据传输?

最佳答案

Rijandel 是 AES 的另一个名称,是当前的“一个好的标准”算法。数字 128 或 256 是 key 长度。

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

你不能真的说它们中的任何一个“更好”或“更差”,因为它们都没有真正被破坏,但总的来说 AES 应该更优越,而且大多数实现也更快。此外,大多数现代 CPU 都在硬件中支持 AES,这将使它更快...因此没有理由使用 AES。

至于 key 长度,128位对于对称密码来说其实已经足够了。当然,除非您是您所在国家/地区的核武器代码的保管人,否则您将需要使用 256 位 key 。

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

编辑:再三考虑,对于 256 位 key 所需的密码长度,50-60 个字符可能是一个更合理的猜测。英语中每个字符的熵少于 2 位。假设您使用了一个更随机的字母和数字字符序列(尽管如此,人们仍然必须能够记住它……),所以我们可能每个字符有 4-5 位的熵(非常乐观!)。这将需要您输入 51 到 64 个字符,因此密码的熵与 key 的熵大致匹配。

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

更新:
截至 2011 年底,存在针对 Rijndael/AES(Bogdanov、Khovratovich、Rechberger)的 key 恢复攻击,这不是“主要是理论”或“搞笑的缩减回合”攻击类型之一。该攻击适用于全轮 AES,比暴力破解快 4 倍左右。因此,从形式上讲,人们可能会认为 Rijndael 已经“崩溃”了。
实际上,到目前为止,攻击是无关紧要的。即使使用受支持的最短 key 长度,比蛮力快四倍的攻击也需要 2126 操作,这即使在大规模硬件实现中也是不切实际的。但是,如果可以改进攻击,这种情况将来可能会改变。

关于php - 这些加密算法之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5253751/

相关文章:

使用 AES 和 MAC 进行 Java 加密

php - 从字符串中提取数据

ruby - 如何在避免被零除的同时按比率排序?

c++ - 最好用正确的值实例化对象然后推送到 vector ,或者实例化,推送到 vector 然后设置正确的值?

javascript - 替换数据 block 中的多个模式

python - 简单的Python查询——MD5哈希

php - 捕获 token_get_all (Tokenizer) 抛出的错误

PHPStorm 缺少返回语句

具有多个 MySQL 结果的 PHP 函数仅返回一条记录

node.js - 如何替换 Node.js 中已弃用的 crypto.createCipher?