我何时应该使用SHA-1,何时应该使用SHA-2?

在我的c#应用程序中,我正在使用RSA签名文件,然后由上传的人上传到我公司的数据库中,在这里我必须选择SHA-1或SHA-2来计算哈希值。
与编程中的任何其他组件一样,我知道必须有一个“在这里使用”和“在那里使用”这两个组件。
那么,什么时候? 那时呢?

编辑:
我的问题是:性能有什么不同? 而不是关于安全性,因为我已经知道SHA-2比SHA-1更安全。
在此链接中 ,不同类型的SHA-2之间的比较注意何时使用SHA-512以及何时不使用SHA-512。 我需要一个关于SHA-1和SHA-2的类似论点。

使用SHA-2。 总是。 由于遗留代码的互操作性问题,SHA-1应保留用于无法使用SHA-2的情况。

在执行实际措施之前没有性能问题。 散列函数很快。 在大多数情况下,哈希函数性能只有微不足道的影响; 甚至检测它可能会很困难。 安全第一。 由于在SHA-1中发现了弱点,因此使用它仍需要一些有力的理由。 使用SHA-256不会受到质疑; 这是“默认选择”。 但如果您使用SHA-1,请准备受到批评。

请注意,有四个函数称为“SHA-2”:SHA-224,SHA-256,SHA-384和SHA-512。 SHA-224和SHA-256是相同的function,除了内部参数(“初始值”)和输出大小(SHA-224输出大小为28字节,而SHA-256提供32字节); 它们具有相同的性能特征。 类似地,SHA-384和SHA-512在性能方面具有相同的function。 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位平台上)可能会产生更小的代码(即在CPU上使用更少的L1缓存)。

因此,如有疑问,请使用SHA-256。 如果您打算使用SHA-1,那么您应该怀疑。

如果你想使用哈希函数进行非加密使用(即弱点对你来说不是问题),那么考虑MD4而不是SHA-1。

SHA-2更强大,更适合安全敏感的应用程序,如数字签名。

当您需要更短的哈希并且安全性不是问题时(例如,文件校验和),SHA-1是好的。

编辑:SHA-1算法更快(比使用256位的SHA-2快10倍,比使用512位的SHA-2快20倍 – 至少在.NET实现中)。

然而,两者都不是那么慢:从透视角度来看,你可以期望在现代计算机(或几十毫秒的1MB文件)中在几毫秒内使用SHA-2(256位)散列100KB文件。

实际上并不存在,这取决于所需的安全性和/或偏执性。 我将SHA256用于任何新应用程序,但是这需要足够大的RSA密钥,可以将整个SHA256指纹作为有效负载处理。

SHA2是更新更强的哈希算法。 主要问题是接收者是否能够处理SHA2。 如果收件人可以处理它, – 毫无疑问,请使用SHA2。