每当我尝试在启用了FIPS的Windows XP计算机上使用MD5时,我都会得到一个System.InvalidOperationException
。
在FIPS上是否应该使用替代算法而不是MD5?
MD5不符合FIPS标准。您可以使用以下散列算法之一代替MD5:
在Windows安全策略设置中强制执行FIPS合规性时,您断言您将仅使用FIPS认证的加密和散列算法。 MD5不是这些经批准的散列算法之一,这就是抛出异常的原因。
解决方法很简单:选择不同的散列算法。 .NET Framework在System.Security.Cryptography
namespace中提供了许多其他选项。选择SHA系列算法之一。我无法想象你有什么理由不得不使用MD5而不是其中一种替代品。
您可以使用Org.BouncyCastle.Crypto.Digests中的MD5Digest
MD5Digest hash = new MD5Digest();
public byte[] Hash(byte[] input)
{
hash.BlockUpdate(input, 0, input.Length);
byte[] result = new byte[hash.GetDigestSize()];
hash.DoFinal(result, 0);
return result;
}
public string Hash(string input)
{
var data = System.Text.Encoding.Unicode.GetBytes(input);
hash.BlockUpdate(data, 0, data.Length);
byte[] result = new byte[hash.GetDigestSize()];
hash.DoFinal(result, 0);
return Hex.ToHexString(result).ToUpper();
}