【发布时间】:2011-09-08 02:01:52
【问题描述】:
我需要解密我的 aspnet_Membership 表中的加密(非散列)密码。在该数据库中,我看到 Password (Encrypted) 和 PasswordSalt 字段,我可以查看我的 web.config 以找到 machinekey > decryptionKey (validation="SHA1" decryption="AES")。
注意:我很想使用散列密码,但出于商业原因,我需要能够使用会员的密码,用于 SSO 进出其他远程系统,因此使用加密(绝对不使用清除- 哎呀!)
鉴于所有这些,肯定有一种方法可以将密码检索为清晰、纯文本和可读文本,即解密,但我在查找任何网站或在 stackoverflow 上回答时遇到了真正的麻烦(我正在查看所有此处的“类似问题”和“具有类似标题的问题”)解释了如何做到这一点。
我找到了MembershipProvider.DecryptPassword Method 页面,但我仍然无法弄清楚如何在我的代码中实际使用它。我还通过 Google 找到了其他页面,但大多数密码解密示例似乎都没有考虑到 salt 和 decrytionKey。
有没有人从各自的位置选择密码、密码盐和解密密钥并使用它们来解密 ASP.NET 2.0 成员身份加密密码的直接示例?
【问题讨论】:
-
SSO 的全部意义在于委托身份验证而不是共享登录凭据。您的业务原因存在偏差。
-
我不知道 MembershipProvider 是如何工作的,但是拥有一个你从来没有真正解密密码的加盐密码并不是重点,你可以使用任何用户输入密码,以任何加密方法应用盐,如果两个加密结果匹配,您将被授予访问权限。我怀疑您是否真的可以在不使用某种暴力攻击的情况下获得明文密码。
-
伙计们,我很欣赏 cmets,虽然业务逻辑可能存在偏差,但需求仍然存在。 ASP.NET MembershipProvider 为密码提供了“清除”、“加密”和“散列”格式选项,强烈建议可以解密“加密”密码 - 只是找出我的问题。
-
@QMKevin:除非它是单向加密,它就是。如果要实现可解密密码,您可能必须实现自定义 MembershipProvider。不过老实说,这是个坏主意。
-
@Cory 很抱歉不同意(我保证更多的是出于挫折和学习的愿望),但我已经阅读了加密密码确实可以解密,而哈希不能。我读到了here Huh,我也刚刚在此链接上发现了一种声称可以让您将编码密码转换回其可读格式的方法。不知道为什么我以前没有看到这个。我的谷歌搜索技能假设它是周末,也许。希望这行得通!
标签: asp.net .net-2.0 passwords asp.net-membership encryption