大约需要多长时间,以及创建SHA-1数据散列需要多少处理能力?这取决于原始数据大小是否有很大差异?生成一个标准HTML文件的散列要比字符串“blah”长得多吗? C++,Java和PHP如何比较速度?SHA-1需要多长时间才能创建散列?
回答
你已经问了很多问题,所以希望我可以尝试依次回答每个问题。对于固定大小的数据块重复应用加密或解密例程,SHA-1(以及许多其他被设计为加密强度高的哈希)是基于加密或解密例程的。因此,当计算长字符串的散列值时,该算法比计算小字符串的散列值的时间成比例地多。在数学上,我们说使用SHA-1时,散列长度为N的字符串的运行时间为O(N)。因此,对HTML文档进行哈希处理所花费的时间应比对字符串“blah”进行哈希处理所花的时间要长,但只能按比例进行。它不会花费更长的时间来完成散列。在速度方面比较C++,Java和PHP,这是危险的领域,我的答案可能会被爆炸,但一般来说 C++比Java略快,它比PHP稍快。如果写得不好,用这些语言中的一种编写的散列实现可能会大大超越其他语言。但是,你不应该担心这一点。通常认为实施自己的散列函数,加密例程或解密例程是一个糟糕的主意,因为它们通常容易受到side-channel attacks的攻击,攻击者可以通过在实现中使用通常极其难以预料的错误来破坏安全。如果您想使用良好的散列函数,请使用预编写的版本。与手工操作相比,它可能会更快,更安全,并且不易出错。
最后,我建议不要使用SHA-1。 SHA-1存在已知的加密弱点,您应该考虑使用强大的散列算法,例如SHA-256。
希望这会有所帮助!
对于指纹文件,SHA-1是否足够?只是问,因为这是我想要做的。另外,关于密码,我已经看到一些盐被用于少数系统,还有一些提到的一些算法叫做bch。 –
如果您的目标只是获取指纹来检测意外的变化(而不是检测故意的篡改),那么SHA-1应该没问题(就像较弱的MD5一样)。但是,如果您使用散列来尝试构建密码系统,则应考虑使用其他算法。 – templatetypedef
这是沿着这些线。我想使用散列作为避免文件重复或查看文件是否被修改的方式。我会看看稍后可以对密码做些什么。 –
密码散列函数的“速度”通常在“每个字节的clock cycles”中进行测量。看到这个page已经过时的比较 - 你可以看到实现和架构如何影响结果。结果变化很大程度上不仅是因为使用了算法,而且它们在很大程度上还取决于处理器体系结构,实施质量以及实施是否高效地使用硬件。这就是为什么一些公司专门创建硬件,特别适合尽可能有效地执行某些密码算法的确切目的。一个很好的例子是SHA-512,虽然它在比SHA-256更大的数据块上工作,但人们可能倾向于认为它应该比在较小输入上工作的SHA-256执行速度慢 - 但SHA-512尤其如此非常适合64位处理器,有时甚至比SHA-256更好。
所有现代哈希算法都在处理固定大小的数据块。它们对块执行固定数量的确定性操作,并对每个块执行此操作,直至最终获得结果。这也意味着您的输入时间越长,操作所需时间越长。根据刚刚解释的特征,我们可以推断操作的长度与消息的输入大小成正比。数学计算机科学地说,我们把它当作一个O(n)操作,其中n是消息的输入大小,正如templatetypedef已经指出的那样。
你不应该让哈希的速度影响你选择的编程语言,所有现代哈希算法真的很快,无论语言如何。尽管基于C的实现会比Java稍微好一点,但它实际上可能会比PHP稍微快一点,但我打赌在实践中你不会知道它的差别。
SHA-1通过64字节的块处理数据。因此,散列长度为n字节的文件所需的CPU时间大致等于处理一个块所需的CPU时间的n/64倍。对于短字符串,必须先将字符串转换为字节序列(SHA-1在字节上工作,而不是在字符上);字符串"blah"
将变为4或8个字节(如果分别使用UTF-8或UTF-16),那么它将被散列为一个块。请注意,从字符到字节的转换可能比散列本身花费更多的时间。在我的PC(x86 Core2,2.4 GHz,64位模式)上使用来自sphlib的纯Java SHA-1实现,我可以以132 MB/s的带宽散列长消息(这是使用单个CPU核心)。请注意,这超出了普通硬盘的速度,所以当哈希大文件时,磁盘可能会成为瓶颈,而不是CPU:散列文件所需的时间将是所需的时间读取文件从磁盘。
(另外,使用C语言编写的本机代码,SHA-1速度上升到330 MB /秒。)
SHA-256被认为是广泛更安全比SHA-1,和一个纯Java实现的我的PC上SHA-256的速度为85 MB/s,速度仍然很快。截至2011年,不建议使用SHA-1。
- 1. sha1散列需要多长时间才能生成?
- 2. SHA256散列需要多长时间?
- 3. 需要多长时间才能在mysql中创建索引?
- 4. 为什么ITextSharp需要很长时间才能创建pdf?
- 5. SecureRandom实例创建需要很长时间才能完成
- 6. jquery绑定需要多长时间才能建立?
- 7. Flex:时间HTTPService需要多长时间才能加载?
- 8. 需要多长时间才能创建到SQL的新数据库连接
- 9. MYSQL需要多长时间才能构建每GB的FULLTEXT索引文本列?
- 10. Julia需要多长时间才能获得最佳性能?
- 11. 创建标识列需要多长时间?
- 12. sha256摘要循环需要多长时间才能达到原始散列或开始循环?
- 13. 需要多长时间才能写入document.cookie
- 14. ServiceStack需要多长时间才能启动?
- 15. Google需要多长时间才能更改重定向uri
- 16. Dropbox需要多长时间才能查看应用程序?
- 17. 名称服务器需要多长时间才能生效?
- 18. ga()需要多长时间才能完成?
- 19. BouncyCastle,需要多长时间才能生成RSA密钥对?
- 20. 确定Oracle需要多长时间才能填充游标
- 21. 需要多长时间才能获得Google地点API密钥
- 22. 需要多长时间才能解密sha256哈希?
- 23. 需要多长时间才能打开一个文件
- 24. 审计导出作业需要多长时间才能完成?
- 25. 新日志源需要多长时间才能生效?
- 26. 需要多长时间.htaccess更改才能生效?
- 27. 需要多长时间才能完成Android安装更新?
- 28. 在app_offline.htm到位后,IIS需要多长时间才能关闭?
- 29. Android Market 503响应需要多长时间才能重置?
- 30. Xamarin iOS项目需要很长时间才能构建
“多久”完全取决于您运行的平台。 –
请阅读http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work – Joe
你在使用哈希算什么? –