我有一个方法用于加密密码并将其存储到数据库,如下所示:
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
我从数据库获得的密码的方法,该密码在存储时由上述方法加密。我不知道怎么做。有人可以帮帮我吗?
答案 0 :(得分:3)
MD5是哈希函数(不是加密)并且是不可逆的。也就是说,您无法从给定的哈希计算原始值。
更新:我建议这篇文章介绍如何安全地存储密码哈希值。还有一个C#实现。
答案 1 :(得分:0)
MD5哈希函数是不可逆转的,无法解密,如果要在登录时检查用户名和密码,请执行此操作。
1.While registering a new user, Hash the password and store it in database.
2.During login,Hash the password entered by the user
3.Now,Compare the password entered(Hashed ) with password stored in database(Hashed)
4.If both of them are same then allow user to login else display an error
答案 2 :(得分:0)
您无法对此进行解密,因为散列是一种单向函数 - 您无法获取散列值并将其重新转换为原始值。
因为看起来你正在处理密码,所以我认为这是某种登录机制,这可能(可能)没问题。您需要做的是散列密码(如您所做),并在用户在您的网站上注册时存储散列值。当用户返回您的站点时,您将获取他们输入的密码,对其进行哈希处理(使用相同的方法),并将哈希值与您存储的值进行比较。如果两个哈希值匹配,则输入正确的密码。
<强>盐强>
哈希存在问题,因为相同的输入值总是产生相同的散列值(否则上述登录机制将不起作用)。不幸的是,这意味着为a dictionary of common passwords生成哈希值是一项微不足道的工作。如果您的数据库遭到入侵,攻击者可以将您存储的所有散列密码与之前计算的值进行比较,如果他得到匹配,那么Bazinga!他进入了你的数据
为了防止这种情况,当你进行初始散列时你可以做的是同时产生一些额外的随机数据,这些随机数据在被散列时会被密码混入。这称为 salt (或者不太常见的是nonce)。而不是复制一些代码来执行此操作,此时我将引导您阅读blowdart的书籍Beginning ASP.NET Security(Amazon UK | Amazon US),其中有讨论所有这些东西 - 散列,腌制和'适当'加密。