所有框架版本均支持.Net SHA256Managed
类,而框架3.5及更高版本仅支持SHA256CryptoServiceProvider
类。
为什么要引入SHA256CryptoServiceProvider
?它似乎与SHA256Managed
类相同,但后者的性能更好。
我缺少什么,为什么要使用SHA256CryptoServiceProvider
?
最佳答案
它与性能无关-SHA256CryptoServiceProvider
使用经 FIPS 140-2验证的(FIPS =联邦信息处理标准)加密服务提供程序(CSP),而SHA256Managed
不使用。 SHA256Managed
是纯托管实现,而SHA256CryptoServiceProvider
可能做同样的事情,但包装了CryptoAPI。
如果您要在美国联邦或许多州政府系统上运行,那么这会产生很大的影响,因为这是软件供应商的要求。在NIST看来,使用未经FIPS验证的加密模块(如SHA256Managed
实现)与完全不使用任何加密没有什么不同。
如果您不关心FIPS验证,那么SHA256Managed
很好。
以Cng结尾的所有内容都代表“加密API:下一代”,指的是美国政府称为Suite B加密算法的较新协议(protocol),但无论.Net框架版本如何,在Vista/Server 2008之前均不提供支持。
因此,请使用适合您所保护内容的算法和实现。您将受到所使用的.Net Framework版本,代码所运行的操作系统以及是否需要使用经过FIPS 140-2/140-3(2011年推出)的经过验证的模块的限制。 。如果您所需的组合没有受支持的.Net Framework类,则可以使用第3方模块,如果需要,您还可以下拉并使用非托管CAPI。
如果您失眠,可以在http://csrc.nist.gov/groups/STM/cmvp/standards.html#02找到治愈方法