如何解密字符串

时间:2009-10-31 09:40:42

标签: c# asp.net forms-authentication

如何在使用后恢复字符串的值 FormsAuthentication.HashPasswordForStoringInConfigFile()

我有一个字符串s1 =“abc”然后

FormsAuthentication.HashPasswordForStoringInConfigFile(s1,“SHA1”)= A9993E364706816ABA3E25717850C26C9CD0D89D

如何将“A9993E364706816ABA3E25717850C26C9CD0D89D”解密回“abc”?

2 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:13)

继Baget的回答之后。散列密码的原因是为了避免您必须存储明文密码以进行身份​​验证 而是存储密码的哈希值 您的身份验证/登录过程将变为如下所示:

用户输入密码 哈希他们输入的密码。
将输入的哈希与存储的哈希进行比较 如果哈希匹配,则密码有效,因此用户已通过身份验证。

这样做的原因是为了保护用户的身份验证详细信息。因此,如果您的密码文件或数据库确实以某种方式成为公共域,那么恶意用户就无法伪装成真正的用户。

因此散列函数的性质意味着它是单向的,因此原始的纯文本无法恢复。

这就是理论,当然在实践中它比这更复杂 大多数用户倾向于使用他们可以轻松记住的密码,这意味着您在安全方面的所有最大努力都会化为乌有,因为如果有人获得了您的密码文件/ DB然后离线他们可以构建常用单词和暴力迭代和哈希的字典直到他们在列表中找到匹配的哈希值。

为了避免这种情况,许多人使用“salting”技术,其中密码在散列之前将密码加密密码“随机”字符串添加到密码中。阅读本文以获取更多details

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

MD5 considered broken
SHA1 also considered broken

希望有帮助并且我意识到这可能比您要求的要多一些但我认为在实施身份验证代码时人们了解安全问题很重要

相关问题