每当我尝试在启用了 FIPS 的 Windows XP 机器上使用 MD5 时,我都会得到一个System.InvalidOperationException
.
我应该在 FIPS 上使用替代算法而不是 MD5 吗?
每当我尝试在启用了 FIPS 的 Windows XP 机器上使用 MD5 时,我都会得到一个System.InvalidOperationException
.
我应该在 FIPS 上使用替代算法而不是 MD5 吗?
MD5 不符合 FIPS。您可以使用以下散列算法之一来代替 MD5:
当您在 Windows 安全策略设置中强制执行 FIPS 合规性时,您就是在断言您将只使用 FIPS 认证的加密和散列算法。MD5不是这些经过批准的散列算法之一,这就是引发异常的原因。
解决方法很简单:选择不同的散列算法。System.Security.Cryptography
.NET Framework 在命名空间中提供了大量其他选项。选择 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();
}
出于加密散列目的,您可以根据需要将 SHA1、SHA2 或 SHA3 与 HMAC 一起使用。
如果您想将 MD5 用于非加密目的,那很好,但您需要提供自己的实现。示例包括:
最后一点是有问题的;验证 SHA1/SHA2 哈希会更好,这取决于验证(例如,它在传输过程中与数据包身份验证是否损坏)。