在我的c#应用程序中,我使用RSA对文件进行签名,然后由上传的人将文件上传到我公司的数据库中。在这里,我必须选择SHA-1或SHA-2来计算散列。
正如编程中的任何其他组件一样,我知道对于这两个组件,必须有一个“在这里使用这个”和“在那里使用那个”。
那么,这是什么时候呢?那什么时候呢?
编辑:
我的问题是:在性能方面有什么不同?不考虑安全性,因为我已经知道SHA-2比SHA-1更可靠。
在本Link中,对不同类型的SHA-2进行比较,注意何时使用SHA-512,何时不使用。我需要一个关于SHA-1和SHA-2的类似论点。
发布于 2011-02-15 20:08:08
使用SHA-2。一直都是。SHA-1应保留用于由于与遗留代码的互操作性问题而无法使用SHA-2的情况。
在执行实际措施之前,不存在性能问题。散列函数速度很快。在大多数情况下,哈希函数的性能影响可以忽略不计;即使检测到它也很困难。安全是第一位的。由于已经在SHA-1中发现了弱点,因此使用它仍然需要一些可靠的理由。使用SHA-256将不会受到质疑;这是“默认选择”。但如果您使用SHA-1,请做好被批评的准备。
请注意,有四个称为“SHA-2”的功能: SHA-224、SHA-256、SHA-384和SHA-512。除了内部参数(“初始值”)和输出大小(SHA-224输出大小为28字节,而SHA-256提供32字节)之外,SHA-224和SHA-256具有相同的功能;它们具有相同的性能特征。同样,SHA-384和SHA-512在性能方面也是相同的。SHA-512使用64位算术运算,在提供64位操作码的平台上比SHA-256快;在32位平台上,SHA-256将更快(注意:在具有本机代码的32位x86上,可以使用SSE2操作码及其64位计算能力,因此SHA-512的一些本机代码实现将在32位模式下比SHA-256更快;OpenSSL代码做到了这一点;但据我所知,.NET中的SHA-512实现是“托管代码”)。此外,所有SHA-*函数都有一些基本的粒度,因为它们按块处理数据:对于SHA-256,块是64字节长的,而SHA-512使用128字节的块;在对非常短的数据元素进行散列时,较高的SHA-512粒度会相应地降低其性能。最后,SHA-256 (在32位平台上)可能会产生更小的代码(即在中央处理器上使用更少的L1缓存)。
因此,如果有疑问,请使用SHA-256。如果您计划使用SHA-1,那么您应该怀疑。
如果您想将哈希函数用于非加密用途(即弱点对您来说不是问题),那么考虑MD4而不是SHA-1。
发布于 2011-02-15 17:42:44
SHA-2更强大,更适合于数字签名等安全敏感应用程序。
当您需要更短的散列并且安全性不是问题(例如,文件校验和)时,SHA-1是不错的选择。
编辑: SHA-1算法更快(比256位的SHA-2快10倍,比512位的SHA-2快20倍-至少在.NET实现中是这样)。
然而,这两者都不是那么慢:客观地说,在现代计算机上,您可以期望用SHA-2 (256位)在几毫秒内散列一个100KB的文件(或在几十毫秒内散列一个1MB的文件)。
发布于 2011-02-15 17:41:39
实际上没有,这取决于所需的安全级别和/或偏执。我会在任何新的应用程序中使用SHA256,但是这需要足够大的RSA,能够处理整个SHA256指纹作为有效负载。
https://stackoverflow.com/questions/5001893
复制相似问题