我有一个不符合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));
}
}
如果我确实这样做了,我是否必须删除所有密码并要求用户重新创建密码?
由于
答案 0 :(得分:2)
MD5哈希算法没有符合FIPS 140-2标准的.Net Framework实现。您必须使用SHA1(System.Security.Cryptography.SHA1CryptoServiceProvider) )或SHA256(System.Security.Cryptography.SHA256CryptoServiceProvider)。
是的,您需要重新哈希密码才能正常工作。