有没有办法衡量哈希算法的强度?例如,用PHP编写的标准化测试来测量crypt
与sha1
的强度?
力量可以指各种事物;单个家用计算机能够通过彩虹表或字符循环,密码中的位长或符号和数字的使用来发现密码的能力。与发现符号或字符数的简单正则表达式不同,PHP函数可以确定强度的要求来自密码,密钥或盐的破坏速度。
我想知道,没有意见,从PHP的散列算法列表中最好的散列算法。
foreach (hash_algos() as $algorithm) {
// test strength
}
答案 0 :(得分:5)
散列的强度是数学/理论概念,即如果发现任何理论或实际差异。
如果没有公布的弱点,那么强度就是摘要的长度。例如。 SHA-1具有160位输出,但SHA-256具有256位输出。
“以编程方式”测试力量的唯一方法是暴力破解主要是毫无意义的哈希。
最好自己研究每个哈希值,而不是试图以编程方式确定“最佳”哈希值。
答案 1 :(得分:1)
散列算法将任意输入映射到n
位的输出序列。 “良好”散列算法将长度为n
位的每个输入映射到n
位的不同输出序列。当两个不同的输入映射到相同的输出时,会发生冲突。
因此,测试两种散列算法的比较强度的一种简单方法是生成大量输入,将它们提供给两种算法,并计算碰撞次数。
请注意,“简单”意味着“概念上简单”。执行实际测试需要大量的计算资源。
答案 2 :(得分:0)
我认为,从数学角度来看,如果存在这样的算法,考虑其他适当输入的算法的运行时间是考虑算法的运行时间。
基于我最近使用的一些基本加密算法的工具,我可以说,即使是基本指数密码,找到k的最快算法也在e ^(sqrt(log p log log p)中运行,这使得它不可行大p。看起来这对“力量”来说是一个很好的理论测量。
我绝不是这方面的专家,加文和亚当似乎更有知识。