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

2022-09-04 08:20:45

创建数据的SHA-1哈希大约需要多长时间和多少处理能力?根据原始数据大小,这是否会有很大差异?生成标准HTML文件的哈希值是否比字符串“blah”花费更长的时间?C++、Java 和 PHP 在速度上如何比较?


答案 1

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

SHA-1(以及许多其他设计为加密功能强大的哈希)基于对固定大小的数据块重复应用加密或解密例程。因此,在计算长字符串的哈希值时,该算法比计算小字符串的哈希值花费更多的时间。从数学上讲,我们说使用 SHA-1 时,对长度为 N 的字符串进行哈希处理的运行时为 O(N)。因此,对 HTML 文档进行哈希处理应该比对字符串“blah”进行哈希处理需要更长的时间,但只能按比例进行哈希处理。执行哈希操作不会花费很长时间。

至于在速度方面比较C++,Java和PHP,这是危险的领域,我的答案可能会被抨击,但总的来说,C++比Java略快,Java比PHP略快。如果用其中一种语言编写的良好哈希实现,如果它们写得不好,则可能会大大优于其他语言。但是,您不必担心这一点。通常认为实现自己的哈希函数、加密例程或解密例程是一个坏主意,因为它们通常容易受到侧信道攻击,攻击者可以通过在实现中使用通常很难预料到的错误来破坏您的安全性。如果要使用良好的哈希函数,请使用预先编写的版本。它可能比您手动执行的任何操作更快,更安全,更不容易出错。

最后,我建议根本不使用SHA-1。SHA-1 具有已知的加密弱点,您应该考虑改用强哈希算法,例如 SHA-256。

希望这有帮助!


答案 2

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

一个很好的例子是SHA-512,尽管它适用于比SHA-256更大的数据块,但人们可能倾向于认为它通常应该比SHA-256在较小的输入下执行得更慢 - 但SHA-512特别适合64位处理器,有时性能甚至比那里的SHA-256更好。

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

你不应该让散列的速度影响你对编程语言的选择,所有现代散列算法都非常非常快,无论哪种语言。虽然基于C的实现会比Java做得稍微好一些,Java也可能比PHP稍微快一些,但我敢打赌,在实践中你不会知道其中的区别。


推荐