【发布时间】:2012-04-15 12:50:46
【问题描述】:
有没有办法衡量哈希算法的强度?例如,一个用 PHP 编写的标准化测试来衡量 crypt 与 sha1 的强度?
力量可以指各种各样的东西;单个家用计算机可以通过彩虹表或字符循环、密码中的位长度或符号和数字的使用来发现密码的能力。与发现符号或字符数的简单正则表达式不同,可以确定强度的 PHP 函数的要求是密码、密钥或盐的破解速度。
我想知道 PHP 的散列算法列表中哪种散列算法最好。
foreach (hash_algos() as $algorithm) {
// test strength
}
【问题讨论】:
-
哈希的“强度”对您来说究竟意味着什么?它有几种含义?为什么它对你如此重要?你用它做什么?
-
在最先进的散列算法中发现弱点是研究级密码学。如果有一种算法,很多聪明人会失业(或者至少以不同的方式度过他们的时间)。
-
你最好在谷歌上搜索比较 - 很多人都写过关于每种类型和好处等的文章。
-
@safarov:我认为没有多少长度为 2^128 的哈希算法......
-
@safarov 不要将位数与数字范围混淆。一个 128 位整数需要 16 个字节来存储并允许 2^128 个值,这对于 hashign 算法来说是相当多且明智的。一个 2^128 位整数需要 10^25 TB 来存储并允许 2^(2^128) 个值(这个数字有 10^38 个十进制数字) - IOW,这太不切实际了。但无论如何,我的观点是:输出数字范围与算法的强度(通过任何合理的强度定义)几乎没有关系。 [Wolfram|Alpha 带给你的所有数字]