【发布时间】:2015-03-04 17:10:05
【问题描述】:
我有一个不符合 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));
}
}
如果我真的做到了,我是否必须删除所有密码并要求用户重新创建他们的密码?
谢谢
【问题讨论】:
-
您为什么不利用 Active Directory 来授权用户和凭据?如果你不得不问这个问题,你做对的概率接近于零。
-
检查 hashmd5.HashSize 属性。来自 MSDN:“此算法支持从 128 位到 192 位的密钥长度,以 64 位为增量。”.
-
@PieterGeerkens :除了这个遗留实现之外,还有一个活动目录实现。如果我们更改上述代码,我正在尝试评估需要什么。
标签: c# encryption fips