-->

从加密函数解密方法(Decrypt method from encryption function)

2019-08-16 22:37发布

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

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 ,我从中通过上述方法,同时将其存储加密的数据库中获取的密码。 我不知道如何做到这一点。 任何人都可以帮助我吗?

Answer 1:

MD5是一个散列函数(未加密),并是不可逆的。 也就是说,你不能从一个给定的哈希计算的原始值。

更新:我推荐这篇文章中描述了如何存储密码哈希安全。 有一个C#实现为好。

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



Answer 2:

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


Answer 3:

你不能解密这一点,因为散列是一个单向函数 - 你不能把一个散列值,并把它放回原来的值。

因为它看起来像你处理的密码,所以我认为这是某种形式的登录机制,这是(可能)确定。 你需要做的是哈希密码(如你所做的),并存储散列值时,在您的网站的用户注册。 当用户返回到您的网站,你把他们输入密码,哈希它(用同样的方法),并比较你保存的值的哈希值。 如果两个散列匹配,正确的密码被输入。


还有一个问题,哈希,在相同的输入值总是产生相同的散列值(否则为登录上述机制将无法正常工作)。 不幸的是,这意味着,比如说,生成散列值常用密码字典是一个平凡的工作。 如果你的数据库被攻破,攻击者就可以比较你要做的存储对他先前计算值的散列密码,如果他获得匹配的则Bazinga! 他钻进你的数据。
为了防范这一点,你可以当你做你的初始散列是在同一时间产生,因为它是被混编获取与密码混合的随机数据的额外位做什么。 这就是所谓的 (或较不常见随机数)。 而不是复制一些代码来做到这一点,在这一点上,我要你直接blowdart的书开始ASP.NET安全( 亚马逊英国 | 亚马逊美国 ),它具有所有这些东西的讨论-哈希,盐渍和“适当的”加密。



文章来源: Decrypt method from encryption function