解密方法来自加密函数

时间:2013-02-13 09:55:55

标签: c# asp.net password-hash

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

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我从数据库获得的密码的方法,该密码在存储时由上述方法加密。我不知道怎么做。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:3)

MD5是哈希函数(不是加密)并且是不可逆的。也就是说,您无法从给定的哈希计算原始值。

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

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

答案 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),其中有讨论所有这些东西 - 散列,腌制和'适当'加密。