所有框架版本都支持.Net SHA256Managed
类,而SHA256CryptoServiceProvider
类仅支持框架3.5及更高版本。
为什么引入SHA256CryptoServiceProvider
?它似乎与SHA256Managed
类相同,但后者表现更好。
我缺少什么,为什么要使用SHA256CryptoServiceProvider
?
答案 0 :(得分:60)
与性能无关 - SHA256CryptoServiceProvider
使用 FIPS 140-2验证(FIPS =联邦信息处理标准)加密服务提供商(CSP)SHA256Managed
才不是。 SHA256Managed
是一个纯托管实现,而SHA256CryptoServiceProvider
大概是相同的,但包装了CryptoAPI。
如果您要在美国联邦或许多州政府系统上运营,这会产生很大的影响,因为这是软件供应商的要求。在NIST看来,使用非FIPS验证的加密模块(如SHA256Managed
实现)与完全不使用任何加密没有区别。
如果您不关心FIPS验证,那么SHA256Managed
就可以了。
以Cng结尾的一切代表“Crytographic API:Next Generation”,它指的是美国政府称为Suite B加密算法的新协议,但无论.Net框架版本如何,在Vista / Server 2008之前都没有支持)。
因此,请使用适合您所保护的算法和实现。您将受限于您正在使用的.Net框架版本,运行您的代码的操作系统,以及您是否需要使用FIPS 140-2 / 140-3(即将在2011年)验证的模块。如果您所需的组合没有受支持的.Net Framework类,则可以使用第三方模块,如果需要,您还可以下拉并使用非托管CAPI。
如果您失眠,可以在http://csrc.nist.gov/groups/STM/cmvp/standards.html#02
找到治疗方法答案 1 :(得分:4)
我想添加一些关于此的信息,因为我遇到了一个问题,需要我切换到使用CSP版本。对不起,我无法添加评论(代表太低)。
要进行测试,可以通过将HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ FipsAlgorithmPolicy \ Enabled设置为1来快速启用FIPS。然后启动Visual Studio并尝试构建使用SHA256Managed
的项目。您将收到错误消息"此实现不是Windows平台FIPS验证的加密算法的一部分"。实际上,您可以获得任何*托管加密算法。
现在将SHA256Managed
换成SHA256CryptoServiceProvider
并重建。噗,错误就消失了!
注意:如果您已部署程序且客户启用FIPS,则会抛出InvalidOperationException
,但上面会显示相同的错误消息。
答案 2 :(得分:2)
两者都会生成相同的哈希值。唯一的区别是SHA256Managed
是哈希的托管实现。
另请注意,SHA256CryptoServiceProvider
使用操作系统加密服务提供程序,即使安装了.NET 3.5,也需要使用Windows XP SP3,7或2008才能运行。
至于优势,使用SHA256CryptoServiceProvider
必须提供比SHA256Managed
更好的性能。