SHA256CryptoServiceProvider不符合FIPS标准?

时间:2014-01-24 07:12:37

标签: c# encryption

我正在寻找符合FIPS标准的C#中的SHA256实现。事实证明SHA1CryptoServiceProvider工作。但是为什么SHA256CryptoServiceProvider会跳过

{"This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms."}

错误?好像它应该只是工作。

var sha = System.Security.Cryptography.SHA256CryptoServiceProvider.Create();   // not FIPS

在这种情况下,我使用的是.NET 4.5,但同样的事情发生在3.5和4.0中。我认为SHA256CryptoServiceProvider是符合FIPS标准的SHA256Managed替代品。 SHA256Cng会抛出相同的错误。

更新。我想我需要制作一个“新的SHA256CryptoServiceProvider”,而不是使用Create()

2 个答案:

答案 0 :(得分:2)

正如更新中建议的原始海报一样,解决方案是实际创建SHA256CryptoServiceProvider(或512)的新实例。调用Create将不起作用:

var csp = new SHA512CryptoServiceProvider();
byte[] hashedBytes = csp.ComputeHash(......);
String hashedText = Convert.ToBase64String(hashedBytes); 

答案 1 :(得分:1)

没有SHA256CryptoServiceProvider.Create(),但是有SHA256.Create()

在.NET Framework上,如果未激活FIPS模式,则此方法将创建SHA256Managed类的实例。如果激活了FIPS模式,它将创建SHA256Cng类的实例。

但是,有一个警告(也许是最初的问题):

在启用了FIPS的.NET 4.6.1和更低版本上,选择了SHA256Managed,它不符合FIPS。

如果要定位.NET <= 4.6.1,则可以使用以下方法:

public static SHA256 CreateSHA256()
{
    try
    {
        return SHA256.Create();
    }
    catch (TargetInvocationException)
    {
        return SHA256CryptoServiceProvider.Create();
    }
}