如何使以下代码符合FIPS?

时间:2015-03-04 17:10:06

标签: c# encryption fips

我有一个不符合FIPS标准的遗留应用程序。当用户第一次保存密码时,加密密码保存在数据库中,下面的算法用于确定登录时的加密密码(然后将其与数据库值进行比较)。

我的问题是我可以用符合FIPS标准的电话取代这些电话吗? (我尝试将哈希调用更改为var hashmd5 = MACTripleDES.Create(),但TripleDESCryptoServiceProvider调用失败,并且“指定的密钥不是此算法的有效大小。”。)。

      using (var hashmd5 = new MD5CryptoServiceProvider())
      {
          byte[] pwdhash = hashmd5.ComputeHash(Encoding.ASCII.GetBytes(PasswordSalt));
          using (var des = new TripleDESCryptoServiceProvider {Key = pwdhash, Mode = CipherMode.ECB})
          {
             byte[] buff = Encoding.UTF8.GetBytes(password);
                           result = Convert.ToBase64String(des.CreateEncryptor().TransformFinalBlock(buff, 0, buff.Length)); 

          }
      }

如果我确实这样做了,我是否必须删除所有密码并要求用户重新创建密码?

由于

1 个答案:

答案 0 :(得分:2)

MD5哈希算法没有符合FIPS 140-2标准的.Net Framework实现。您必须使用SHA1(System.Security.Cryptography.SHA1CryptoServiceProvider) )或SHA256(System.Security.Cryptography.SHA256CryptoServiceProvider)。

是的,您需要重新哈希密码才能正常工作。