【发布时间】:2013-02-13 09:55:54
【问题描述】:
我有一种方法用于加密密码并将其存储到数据库中,如下所示:
public static string Md5Encrypted(string password)
{
byte[] pass = Encoding.UTF8.GetBytes(password);
MD5 md5 = new MD5CryptoServiceProvider();
string strPassword = Encoding.UTF8.GetString(md5.ComputeHash(pass));
return strPassword;
}
现在我想要decrypt我从数据库中获得的密码的方法,该密码在存储时通过上述方法加密。我不知道怎么做。有人可以帮帮我吗?
【问题讨论】:
-
您没有使用 MD5 加密任何内容。您正在生成一个不可逆的哈希。您应该通过生成给定密码的哈希值来比较密码,并将其与存储的哈希值进行比较。
-
扭转这种情况的唯一方法是猜测正确的密码。顺便说一句,这不是一个好的密码哈希,原因有两个:1)没有盐 2)MD5 很快。您应该改用 PBKDF2、bcrypt 或 scrypt。
-
@RanhiruCooray 不,我没有。当我将新的加密密码与旧密码进行比较时,即已经加密存储在数据库中,如果密码匹配,它不会返回 true。这 ?周围变成了一个矩形?
-
顺便说一下,您通常不希望将哈希字节直接转换为 UTF-8 字符串。如果你想要一个字符串表示,坚持例如基数 64 (Convert.ToBase64String)。这可能就是您得到“矩形”而比较失败的原因。
-
此外,我会使用加盐方法使密码更安全。没有它,很容易获得密码。
标签: c# asp.net password-hash