SHA-1创建哈希需要多长时间?

Tes*_*ter 11 php c++ java hash sha1

大约需要多长时间,以及创建SHA-1数据哈希需要多少处理能力?根据原始数据大小,这有很大不同吗?生成标准HTML文件的哈希值会比字符串"blah"长得多吗?C++,Java和PHP如何在速度上进行比较?

tem*_*def 11

你问了很多问题,所以希望我可以尝试依次回答每个问题.

SHA-1(以及设计为加密强大的许多其他哈希)基于对加固或解密例程重复应用于固定大小的数据块.因此,当计算长字符串的散列值时,算法比计算小字符串的散列值成比例地花费更多时间.在数学上,我们说使用SHA-1时,对长度为N的字符串进行散列的运行时为O(N).因此,散列HTML文档应该比散列字符串"blah"花费更长的时间,但只是按比例这样.哈希不会花费更长的时间.

至于在速度方面比较C++,Java和PHP,这是一个危险的领域,我的答案可能会受到轰炸,但一般来说 C++比Java略快,后者比PHP略快.如果编写得不好,那么使用其中一种语言编写的优秀哈希实现可能会明显优于其他语言.但是,您不必担心这一点.实现自己的哈希函数,加密例程或解密例程通常被认为是一个坏主意,因为它们通常容易受到通道攻击,攻击者可能通过使用通常非常难以实现的错误来破坏您的安全性.有所期待.如果要使用良好的哈希函数,请使用预先编写的版本.与手工操作相比,它可能更快,更安全,更不容易出错.

最后,我建议不要使用SHA-1.SHA-1已知存在加密弱点,您应该考虑使用强哈希算法,例如SHA-256.

希望这可以帮助!

  • 如果您的目标只是获取指纹以检测意外更改(而不是检测故意篡改),那么SHA-1应该没问题(与较弱的MD5一样).但是,如果您使用哈希来尝试构建密码系统,则应考虑使用其他算法. (2认同)

emb*_*oss 5

加密散列函数的"速度"通常以" 每字节的时钟周期 "来度量.请参阅此页面以了解过时的过时比较 - 您可以看到实施和架构如何影响结果.结果差别很大,不仅因为使用了算法,而且它们在很大程度上还取决于您的处理器架构,实现的质量以及实现是否有效地使用硬件.这就是为什么有些公司专注于创建特别适合尽可能高效地执行某些加密算法的确切目的的硬件.

一个很好的例子是SHA-512,虽然它适用于比SHA-256更大的数据块,但是人们可能倾向于认为它通常比在较小的输入上工作的SHA-256要慢 - 但是SHA-512特别适用于64比特处理器有时甚至比SHA-256更好.

所有现代哈希算法都在处理固定大小的数据块.它们对块执行固定数量的确定性操作,并对每个块执行此操作,直到最终得到结果.这也意味着输入时间越长,操作所需的时间越长.从刚才解释的特征中我们可以推断出操作的长度与消息的输入大小成正比.从计算机科学的角度来看,我们将其称为O(n)运算,其中n是消息的输入大小,正如templatetypedef已经指出的那样.

你不应该让哈希的速度影响你选择的编程语言,所有现代哈希算法都非常非常快,无论语言如何.虽然基于C的实现会比Java稍微好一些,后者可能会比PHP快一点,但我在实践中打赌你不会知道它们的区别.