所以我想知道哈希算法的各种实现之间是否存在任何重大差异,例如以SHA系列算法为例.它们每个都有3个实现,1个托管代码和2个围绕不同本机加密API的包装器,但使用它们之间有什么主要区别吗?我可以想象包装器版本可以具有更高的性能,因为它在本机代码中执行,但是他们都需要执行完全相同的计算,从而提供相同的输出,即嘿是可互换的.它是否正确?
例如,SHA512CNG无法用于XP SP2(文档错误),但SHA512MANAGED可以.
@Maxim - 谢谢,但不是我要求的.我问的是,使用给定哈希算法的Managed/CryptoServiceProvider/CNG实现,除了可能的性能之外是否存在任何差异.使用.NET 3.5,您可以获得具有三种实现的所有哈希算法,因此
SHA512Managed SHA512CryptoServiceProvider SHA512Cng
后两者是本机API的包装器.例如,对于所有SHAxxx实现都是如此.
一个区别是本机版本(至少其中一些)是FIPS认证的(即,由美国政府批准),而受管理的版本则不是.如果您的代码恰好在已配置为"仅FIPS"的Windows计算机上运行,则尝试使用托管版本将失败.
大多数Windows机器都没有以这种方式配置,但如果您部署到政府或面向国防(或其他高度安全)的环境,您可能会遇到这种情况.
请参见http://blogs.msdn.com/shawnfa/archive/2005/05/16/417975.aspx.