SHA256CryptoServiceProvider和SHA256Managed之间的区别

Arn*_*eer 33 c#

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

为什么要SHA256CryptoServiceProvider介绍?它似乎和SHA256Managed班级一样,但后者表现更好.

我错过了什么,为什么要使用SHA256CryptoServiceProvider

Sco*_*Bai 62

它与性能无关 - 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找到治疗方法.

  • 很好的解释,加上治疗失眠症.你得到了我的投票. (7认同)

小智 7

我想添加一些关于此的信息,因为我刚遇到一个问题,需要我切换到使用 CSP 版本。抱歉,我无法添加评论(代表太低)。

为了对此进行测试,您可以通过将 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy\Enabled 设置为 1 来快速启用 FIPS。然后启动 Visual Studio 并尝试构建一个使用SHA256Managed. 您会收到错误消息,提示“此实现不是 Windows 平台 FIPS 验证的加密算法的一部分”。事实上,对于任何 *Managed 加密算法,您都会得到它。

现在换出SHA256ManagedSHA256CryptoServiceProvider和重建。噗,错误消失了!

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