如何测量哈希算法强度

时间:2012-04-01 17:37:54

标签: php algorithm hash

有没有办法衡量哈希算法的强度?例如,用PHP编写的标准化测试来测量cryptsha1的强度?

力量可以指各种事物;单个家用计算机能够通过彩虹表或字符循环,密码中的位长或符号和数字的使用来发现密码的能力。与发现符号或字符数的简单正则表达式不同,PHP函数可以确定强度的要求来自密码,密钥或盐的破坏速度。

我想知道,没有意见,从PHP的散列算法列表中最好的散列算法。

foreach (hash_algos() as $algorithm) {
    // test strength
}

3 个答案:

答案 0 :(得分:5)

散列的强度是数学/理论概念,即如果发现任何理论或实际差异。

如果没有公布的弱点,那么强度就是摘要的长度。例如。 SHA-1具有160位输出,但SHA-256具有256位输出。

“以编程方式”测试力量的唯一方法是暴力破解主要是毫无意义的哈希。

最好自己研究每个哈希值,而不是试图以编程方式确定“最佳”哈希值。

答案 1 :(得分:1)

散列算法将任意输入映射到n位的输出序列。 “良好”散列算法将长度为n位的每个输入映射到n位的不同输出序列。当两个不同的输入映射到相同的输出时,会发生冲突

因此,测试两种散列算法的比较强度的一种简单方法是生成大量输入,将它们提供给两种算法,并计算碰撞次数。

请注意,“简单”意味着“概念上简单”。执行实际测试需要大量的计算资源。

答案 2 :(得分:0)

我认为,从数学角度来看,如果存在这样的算法,考虑其他适当输入的算法的运行时间是考虑算法的运行时间。

基于我最近使用的一些基本加密算法的工具,我可以说,即使是基本指数密码,找到k的最快算法也在e ^(sqrt(log p log log p)中运行,这使得它不可行大p。看起来这对“力量”来说是一个很好的理论测量。

我绝不是这方面的专家,加文和亚当似乎更有知识。