解密方法来自加密函数

我有一个方法,用于加密密码并将其存储到数据库,如下所示:

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是散列函数(不是加密)并且是不可逆的。 也就是说,您无法从给定的哈希计算原始值。

更新:我建议这篇文章介绍如何安全地存储密码哈希。 还有一个C#实现。

http://crackstation.net/hashing-security.htm

您无法对此进行解密,因为散列是一种单向函数 – 您无法获取散列值并将其重新转换为原始值。

因为看起来你正在处理密码,因此我认为这是某种登录机制,这可能(可能)没问题。 您需要做的是散列密码(如您所做),并在用户在您的网站上注册时存储散列值。 当用户返回您的站点时,您将获取他们输入的密码,对其进行哈希处理(使用相同的方法),并将哈希值与您存储的值进行比较。 如果两个哈希值匹配,则输入正确的密码。


哈希存在问题,因为相同的输入值总是产生相同的散列值(否则上述登录机制将不起作用)。 不幸的是,这意味着为普通密码字典生成哈希值是一项微不足道的练习。 如果您的数据库遭到入侵,攻击者可以将您存储的所有哈希密码与之前计算的值进行比较,如果他得到匹配,那么Bazinga! 他进入了你的数据。
为了防止这种情况,当您进行初始哈希时,您可以执行的操作同时生成一些额外的随机数据,这些数据会在密码被混合时混入。 这被称为 (或不太常见的nonce)。 而不是复制一些代码来做到这一点,在这一点上,我将引导你到blowdart的书开始ASP.NET安全( 亚马逊英国 | 亚马逊美国 ),它讨论了所有这些东西 – 哈希,盐析和’适当的加密。

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