C# 如何使以下代码符合FIPS?

C# 如何使以下代码符合FIPS?,c#,encryption,fips,C#,Encryption,Fips,我有一个不符合FIPS的遗留应用程序。当用户第一次保存密码时,加密密码保存在数据库中,并使用以下算法确定登录时的加密密码(然后与数据库值进行比较) 我的问题是,我可以用符合FIPS的呼叫替换这些呼叫吗?(我尝试将哈希调用更改为var hashmd5=MACTripleDES.Create(),但TripleDESCryptoServiceProvider调用失败,原因是“指定的密钥不是此算法的有效大小。”) 如果我真的能做到这一点,我是否必须删除所有密码并要求用户重新创建他们的密码 谢谢MD5哈

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

我的问题是,我可以用符合FIPS的呼叫替换这些呼叫吗?(我尝试将哈希调用更改为var hashmd5=MACTripleDES.Create(),但TripleDESCryptoServiceProvider调用失败,原因是“指定的密钥不是此算法的有效大小。”)

如果我真的能做到这一点,我是否必须删除所有密码并要求用户重新创建他们的密码


谢谢

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


是的,您需要重新散列密码才能工作。

MD5散列算法没有符合FIPS 140-2的.Net Framework实现。您必须使用SHA1(System.Security.Cryptography.SHA1 CryptoServiceProvider )或者改为SHA256(System.Security.Cryptography.SHA256CryptoServiceProvider)


是的,您需要重新散列密码才能工作。

MD5散列算法没有符合FIPS 140-2的.Net Framework实现。您必须使用SHA1(System.Security.Cryptography.SHA1 CryptoServiceProvider )或者改为SHA256(System.Security.Cryptography.SHA256CryptoServiceProvider)


是的,您需要重新散列密码才能工作。

MD5散列算法没有符合FIPS 140-2的.Net Framework实现。您必须使用SHA1(System.Security.Cryptography.SHA1 CryptoServiceProvider )或者改为SHA256(System.Security.Cryptography.SHA256CryptoServiceProvider)



是的,您需要重新散列密码以使其工作。

为什么不利用Active Directory授权用户和凭据?如果必须问这个问题,则正确执行该问题的概率接近于零。请检查hashmd5.HashSize属性。来自MSDN:“此算法支持密钥长度从128位到192位,增量为64位。”@PieterGeerkens:除了此传统实现之外,还有一个active directory实现。我正在尝试评估如果我们更改上述代码需要什么。为什么不利用Active Directory授权用户和凭据?如果必须问这个问题,则正确执行该问题的概率接近于零。请检查hashmd5.HashSize属性。来自MSDN:“此算法支持密钥长度从128位到192位,增量为64位。”@PieterGeerkens:除了此传统实现之外,还有一个active directory实现。我正在尝试评估如果我们更改上述代码需要什么。为什么不利用Active Directory授权用户和凭据?如果必须问这个问题,则正确执行该问题的概率接近于零。请检查hashmd5.HashSize属性。来自MSDN:“此算法支持密钥长度从128位到192位,增量为64位。”@PieterGeerkens:除了此传统实现之外,还有一个active directory实现。我正在尝试评估如果我们更改上述代码需要什么。为什么不利用Active Directory授权用户和凭据?如果必须问这个问题,则正确执行该问题的概率接近于零。请检查hashmd5.HashSize属性。来自MSDN:“此算法支持密钥长度从128位到192位,增量为64位。”@PieterGeerkens:除了此传统实现之外,还有一个active directory实现。我正在尝试评估如果我们更改上述代码需要什么。谢谢Kevin。但是,上面的代码有一个加密部分(TripleDESCryptoServiceProvider),我在尝试工作时遇到困难。首先,如果要从密码派生密钥,可能应该使用Rfc2898DeriveBytes类而不是哈希算法。它就是为此而设计的,允许您指定它返回的字节数。TripleDESCryptoServiceProvider的合法密钥大小为64位(8字节)。Sha1生成160位(20字节)的摘要,SH256生成256位(32字节)的摘要。因此,您只需将哈希输出的前8个字节用作密钥。谢谢Kevin。但是,上面的代码有一个加密部分(TripleDESCryptoServiceProvider),我在尝试工作时遇到困难。首先,如果要从密码派生密钥,可能应该使用Rfc2898DeriveBytes类而不是哈希算法。它就是为此而设计的,允许您指定它返回的字节数。TripleDESCryptoServiceProvider的合法密钥大小为64位(8字节)。Sha1生成160位(20字节)的摘要,SH256生成256位(32字节)的摘要。因此,您只需将哈希输出的前8个字节用作密钥。谢谢Kevin。但是,上面的代码有一个加密部分(TripleDESCryptoServiceProvider),我在尝试工作时遇到困难。首先,如果要从密码派生密钥,可能应该使用Rfc2898DeriveBytes类而不是哈希算法。它就是为此而设计的,允许您指定它返回的字节数。TripleDESCryptoServiceProvider的合法密钥大小为64位(8字节)。Sha1生成160位(20字节)的摘要,SH256生成256位(32字节)的摘要。因此,您只需将哈希输出的前8个字节用作密钥。谢谢Kevin。但是,上面的代码有一个加密部分(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)); 

          }
      }