SHA256CryptoServiceProvider和SHA256Managed之间的区别

时间:2010-08-24 08:58:36

标签: c#

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

为什么引入SHA256CryptoServiceProvider?它似乎与SHA256Managed类相同,但后者表现更好。

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

3 个答案:

答案 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更好的性能。