2009-10-31 52 views
6

如何使用 FormsAuthentication.HashPasswordForStoringInConfigFile()如何解密字符串

后恢复字符串的值i有一个字符串S1 = “ABC”,然后

FormsAuthentication.HashPasswordForStoringInConfigFile(S1,“SHA1 “)= A9993E364706816ABA3E25717850C26C9CD0D89D

我怎样才能解密 “A9993E364706816ABA3E25717850C26C9CD0D89D” 回 “ABC” ??

回答

19

你不能,Hash Function是单向函数。这就是为什么它用于密码的原因,因为您无法使用散列值上的某个反向函数获取密码。

13

继续来自Baget的回答。哈希密码的原因是为了避免您必须存储用于验证的纯文本密码。
而是存储密码的散列。
您的验证/登录过程会变成如下所示:

用户输入密码。
散列它们输入的密码。
将输入的散列值与存储的散列值进行比较。
如果散列匹配,那么密码是有效的,所以用户被认证。

这样做的原因是为了保护用户的身份验证信息。因此,如果您的密码文件或数据库以某种方式成为公有领域,那么恶意用户就不能假装成为真正的用户。

所以散列函数的性质意味着它是一种方式,所以原先的明文无法恢复。

,在实践中的理论,当然它变得复杂多了。
大多数用户倾向于使用密码,他们可以很容易地记住那么这意味着在安全你所有的最好的努力可以化为乌有,因为如果有人获得您的密码文件/ DB然后在线下,他们可以建立的常用词和蛮力迭代字典并散列,直到他们在您的列表中找到匹配的散列。

为了避免这种情况,许多人使用了“腌制”技术,其中密码为短密码“随机”散列之前加入到密码字符串。阅读更多内容details

这里的另一个问题是你的散列算法的优势 - 你需要确保你不能创建'碰撞',即产生相同散列值的两个明文。
许多旧的哈希算法,如MD5和SHA1在这方面越来越容易受到攻击。

MD5 considered broken
SHA1 also considered broken

希望帮助我意识到这可能比你在问多一点,但我认为这是重要的实现验证码

+0

很好的回答,当人们了解安全问题! :-) – Baget 2009-10-31 14:52:41