Maj*_*ajd 23 c# security rsa sha digital-signature
在我的c#应用程序中,我正在使用RSA签名文件,然后由上传的人上传到我公司的数据库中,在这里我必须选择SHA-1或SHA-2来计算哈希值.
与编程中的任何其他组件一样,我知道必须有一个"在这里使用"和"在那里使用"这两个组件.
那么,什么时候?那时呢?
编辑:
我的问题是:性能有什么不同?而不是关于安全性,因为我已经知道SHA-2比SHA-1更安全.
在此链接中,不同类型的SHA-2之间的比较注意何时使用SHA-512以及何时不使用SHA-512.我需要一个关于SHA-1和SHA-2的类似论点.
Tho*_*nin 64
使用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位计算能力,因此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 .