C# 我应该何时使用SHA-1和SHA-2?

C# 我应该何时使用SHA-1和SHA-2?,c#,security,rsa,digital-signature,sha,C#,Security,Rsa,Digital Signature,Sha,在我的c#应用程序中,我使用RSA对文件进行签名,然后上传人将文件上传到我公司的数据库中,在这里,我必须选择SHA-1或SHA-2来计算哈希值。 与编程中的任何其他组件一样,我知道这两个组件必须有一个“在这里使用此”和“在那里使用此”。 那么,这是什么时候?那是什么时候 编辑: 我的问题是:在性能方面有什么不同?不考虑安全性,因为我已经知道SHA-2比SHA-1更可靠。 在本文中,对不同类型的SHA-2进行了比较,并指出何时使用SHA-512以及何时不使用SHA-512。我需要一个关于SHA-1

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

编辑:
我的问题是:在性能方面有什么不同?不考虑安全性,因为我已经知道SHA-2比SHA-1更可靠。

在本文中,对不同类型的SHA-2进行了比较,并指出何时使用SHA-512以及何时不使用SHA-512。我需要一个关于SHA-1和SHA-2的类似论点。

SHA2是更新和更强的哈希算法。主要问题是接收者是否有能力处理SHA2。如果接收者能处理好,那么毫无疑问,选择SHA2。

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

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

当您需要较短的散列并且安全性不是问题(例如,文件校验和)时,SHA-1很好

编辑:SHA-1算法速度更快(256位时比SHA-2快10倍,512位时比SHA-2快20倍——至少在.NET实现中是这样)


然而,两者都没有那么慢:从长远来看,在现代计算机上,您可以在几毫秒内用SHA-2(256位)散列100KB的文件(或在几十毫秒内散列1MB的文件)。

使用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是相同的函数,除了内部参数(“初始值”)和输出大小(SHA-224输出大小为28字节,而SHA-256提供32字节);它们具有相同的性能特征。类似地,SHA-384和SHA-512在功能性能方面是相同的。SHA-512使用64位算术运算,在提供64位操作码的平台上比SHA-256更快;在32位平台上,SHA-256将更快(注意:在32位x86上,使用本机代码,可以使用SSE2操作码及其64位计算能力,因此,在32位模式下,SHA-512的一些本机代码实现将比SHA-256更快;OpenSSL代码可以做到这一点;但据我所知,.NET中的SHA-512实现是“托管代码”)。此外,所有SHA-*函数都有一些基本的粒度,因为它们按块处理数据:对于SHA-256,块的长度为64字节,而SHA-512使用128字节的块;当散列非常短的数据元素时,较高的SHA-512粒度相应地降低了其性能。最后,SHA-256(在32位平台上)可能产生更小的代码(即CPU上使用更少的一级缓存)

所以,当有疑问时,使用SHA-256。如果你计划使用SHA-1,那么你应该怀疑


如果您希望将哈希函数用于非加密用途(即,弱点对您来说不是问题)然后,而不是SHA-1,考虑。

我知道它更强。但是对于数据库连续体更新,我需要知道它是否对速度和精细性有所不同。也就是说,关于性能和安全性的关键区别是什么?我将编辑这个问题以包含这一点。)特殊情况。@尤金,我想让我的问题更一般化,以便对未来项目的要点有一个更全面的概述,并为任何通过类似问题的人带来好处:)似乎是合乎逻辑的。请提供任何参考资料?因为我已经在我的PC(Core2 Q6600)上广泛地查找了它,但找不到类似的比较,在SHA-1和SHA-256之间没有10倍的系数。在.NET中的SHA-1实现(本机实现,而不是“托管”代码)最高速度约为220 MB/s,而SHA-256提供的速度超过60 MB/s(我可以用自己的托管代码获得80 MB/s).SHA-512在32位模式下运行速度约为30 MB/s,但在64位模式下运行速度接近100 MB/s。一个比SHA-1慢十倍的SHA-256实现需要一个严重次优的SHA-256实现。@托马斯,我想你是对的,正如我在某个地方读到的,SHA-2算法对CPU的强度不如SHA-1。我做了一些类似的性能测试昨天,我得到了大致相同的相对答案。MD5约为330 MB/s,SHA1约为175 MB/s,SHA-256约为94 MB/s,SHA-512约为109 MB/s。我所做的所有测试都是在Linux上进行的,从一个2 GB的RAM驱动器读取一个文件。CPU固定在100%。如果我从真实磁盘读取,我发现所有的实现结果都是相同的,以我的磁盘速率,大约为82 MB/S。因此,在大多数情况下,你不必担心速度,它们通常会和你的磁盘驱动器一样慢。谢谢:)这正是我想要的解释:)你的答案有什么特定的来源吗?因为我正在写一篇研究论文,我要引用其中的一部分。如果没有,我需要你您是否允许使用它。thx:-)@Majd:有关SHA-1和SHA-2函数的内部内容,请参阅FIPS 180-3,其中指定了它们:。有关官方安全和