对于支持FIPS的系统,是否有针对MD5的备用哈希算法?

每当我尝试在启用了FIPS的Windows XP计算机上使用MD5时,我都会收到System.InvalidOperationException

在FIPS上是否应该使用替代算法而不是MD5?

MD5不符合FIPS标准。 您可以使用以下散列算法之一代替MD5:

  • HMACSHA1
  • MACTripleDES
  • SHA1CryptoServiceProvider

在Windows安全策略设置中强制执行FIPS合规性时,您断言您将仅使用FIPS认证的加密和散列算法。 MD5 不是这些经批准的散列算法之一,这就是抛出exception的原因。

解决方法很简单:选择不同的散列算法。 .NET Framework在System.Security.Cryptography命名空间中提供了许多其他选项。 选择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(); }