繁体   English   中英

对于启用 FIPS 的系统,是否有替代 MD5 的散列算法?

[英]Is there an alternate hashing algorithm to MD5 for FIPS-enabled systems?

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

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

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

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

解决方法很简单:选择不同的散列算法。 .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();
}

出于加密散列的目的,如果需要,您可以将 SHA1、SHA2 或 SHA3 与 HMAC 一起使用。

如果您想将 MD5 用于非加密目的,那很好,但您需要提供自己的实现。 例子包括:

  • 哈希文件以确定重复项
  • 内部哈希表实现
  • 从他们提供的 MD5 哈希验证文件

最后一点是有问题的; 验证 SHA1/SHA2 哈希会更好,这取决于验证(例如,它在传输过程中是否已损坏与数据包身份验证)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM