使用哪一个:托管与非托管哈希算法

Xaq*_*ron 17 c# hash unmanaged managed

在常规的C#应用​​程序中,哪个类用于散列:xxxManagedxxx(即SHA1Managedvs SHA1)以及为什么?

Ree*_*sey 10

结束的非托管哈希***Cng,即SHA256Cng,也将具有平台限制.它们比托管备选方案快得多,但在Windows XP上运行时会失败,例如.但是,如果您知道您的程序将始终在Windows 7,Vista SP1或2008上运行,那么它们通常会比托管版本执行得更好,即使使用本机互操作开销也是如此.

如果您正在编写通用程序,那么这些***Managed类将更容易使用,因为它们始终有效.

  • @SLaks:在大型哈希作业上,在我的盒子上,它在我上一次性能分析运行中的速度几乎是托管版本的12倍;)YMMV,当然......(我相信速度高度依赖于硬件+操作系统,尽管,因为它取决于你是否获得硬件加速.) (2认同)

SLa*_*aks 7

你应该使用*Managed变体; 他们通常更快.

*CryptoProvider*CNG类使用本地互操作,而且通常较慢.
但是,我听说他们可以使用硬件加密加速器.(我没有检查过)

此外,本机版本已通过FIPS认证; 托管版本不是.

  • @SLaks:我个人认为FIPS认证不仅仅是一个“也”,它应该是决策树顶部的一个决策点。1 不过提到这一点,很少有人知道这个不错的小警告:) (2认同)