如何解密字符串

Avi*_*ash 6 c# asp.net forms-authentication

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

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

FormsAuthentication.HashPasswordForStoringInConfigFile(s1,"SHA1")= A9993E364706816ABA3E25717850C26C9CD0D89D

我怎样才能将"A9993E364706816ABA3E25717850C26C9CD0D89D"解密回"abc"?

Bag*_*get 19

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


zeb*_*box 13

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

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

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

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

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

为了避免这种情况,许多人使用"salting"技术,其中密码在散列之前将密码加密密码"随机"字符串添加到密码中.阅读本文了解更多详情

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

MD5认为破坏的
SHA1也被认为是破碎的

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