Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SH256CryptoServiceProvider和SH256Managed之间的差异_C# - Fatal编程技术网

C# SH256CryptoServiceProvider和SH256Managed之间的差异

C# SH256CryptoServiceProvider和SH256Managed之间的差异,c#,C#,所有框架版本都支持.NetSHA256Managed类,而SHA256CryptoServiceProvider类仅在框架3.5及更高版本中受支持 为什么引入了SHA256CryptoServiceProvider?它似乎与SHA256Managed类的功能相同,但后者的性能更好 我缺少什么,为什么要使用SHA256CryptoServiceProvider?两者都将生成相同的哈希。唯一的区别是SHA256Managed是一种哈希的托管实现 还请注意,SHA256CryptoServicePro

所有框架版本都支持.Net
SHA256Managed
类,而
SHA256CryptoServiceProvider
类仅在框架3.5及更高版本中受支持

为什么引入了
SHA256CryptoServiceProvider
?它似乎与
SHA256Managed
类的功能相同,但后者的性能更好


我缺少什么,为什么要使用
SHA256CryptoServiceProvider

两者都将生成相同的哈希。唯一的区别是
SHA256Managed
是一种哈希的托管实现

还请注意,
SHA256CryptoServiceProvider
使用操作系统加密服务提供程序,即使安装了.NET 3.5,也需要Windows XP和SP3、7或2008才能工作


至于优点,使用
SHA256CryptoServiceProvider
必须比
SHA256Managed
提供更好的性能,这与性能无关-
SHA256CryptoServiceProvider
使用经验证的FIPS 140-2(FIPS=联邦信息处理标准)加密服务提供商(CSP)而
SHA256Managed
则不是。
SHA256Managed
是一个纯托管实现,而
SHA256CryptoServiceProvider
可能做同样的事情,但包装了CryptoAPI

如果要在美国联邦或许多州政府系统上运行,这会产生很大的影响,因为这是软件供应商的要求。在NIST看来,使用非FIPS验证的加密模块,如
SHA256管理的
实现,与根本不使用任何加密没有什么不同

如果您不关心FIPS验证,那么
SHA256Managed
就可以了

以Cng结尾的所有内容都代表“Crytographic API:下一代”,它指的是美国政府称之为Suite B加密算法的较新协议,但无论.Net framework版本如何,Vista/Server 2008之前都不支持

因此,请使用适合您所保护内容的算法和实现。您将受到使用的.Net framework版本、代码运行的操作系统以及是否需要使用FIPS 140-2/140-3(将于2011年推出)验证模块的限制。如果您需要的组合不支持.Net Framework类,则有第三方模块可用,如果需要,您也可以下拉并使用非托管CAPI


如果你有失眠,你可以在

找到治疗方法。我想补充一些关于这方面的信息,因为我刚刚遇到一个问题,需要我改用CSP版本。抱歉,我无法添加评论(rep过低)

为了测试这一点,您可以通过将HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy\Enabled设置为1来快速启用FIPS。然后启动Visual Studio并尝试构建一个使用
SHA256Managed
的项目。您将收到错误信息:“此实现不是Windows平台FIPS验证的加密算法的一部分”。事实上,对于任何*托管加密算法,您都会得到这样的结果

现在用
SHA256CryptoServiceProvider
交换出
SHA256Managed
,然后重新构建。呸,错误走开


注意:如果您部署了一个程序,并且客户启用了FIPS,它将抛出一个
InvalidOperationException
,并显示上面相同的错误消息。

谢谢您的解释。在MSDN上找不到此信息。甚至还有一个SHA256Cng类。目前还不清楚在某些情况下应该使用哪一种。ScottBai在他的回答中对性能提出了相反的看法。SHA256Managed比SHA256CryptoServiceProvider快得多。关于速度,目前对算法进行的基准测试(在Win 8.1和.net 4.6上)表明,SHA256Managed比其他算法慢得多,对内存中从1mb到512mb的随机字节进行哈希运算时,始终要花费大约两倍的时间,并带有重复等。读者在做出任何结论之前应该自己测试一下。@GeorgeHelyar您尝试过更小的有效负载吗?这是由于本机实现的编组/调用可能会产生的开销而导致的效果可能逆转的地方。很好的解释,加上失眠的治疗方法。你得到了我的投票。也可以查看有关正确使用SHA256CryptoServiceProvider的相关帖子:你能更新链接吗?