无论何时我尝试在启用 FIPS 的 Windows XP 计算机上使用 MD5,都会出现“System.InvalidOperationException”错误。
在 FIPS 上是否有替代的算法可供使用,而不是 MD5?
在 FIPS 上是否有替代的算法可供使用,而不是 MD5?
MD5不符合FIPS标准。您可以使用以下其中一种哈希算法来代替MD5:
当你在Windows安全策略设置中强制执行FIPS合规性时,你断言你只会使用经过FIPS认证的加密和散列算法。MD5不是其中获得批准的哈希算法之一,这就是为什么会引发异常。
解决方法很简单:选择另一个哈希算法。.NET Framework提供了许多其他选项,可以在System.Security.Cryptography
命名空间中找到。选择SHA家族算法之一。我想象不出你为什么要使用MD5而不是其中的一种替代方案。
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();
}
在进行加密哈希时,您可以使用SHA1、SHA2或SHA3,如果需要的话可以使用HMAC。
如果您想要用MD5进行非加密目的,那么也是可以的,但您需要提供自己的实现。例如:
最后一点是有问题的;验证SHA1/SHA2哈希会更好,这取决于验证方式(例如,在传输过程中是否损坏 vs. 数据包认证)。