从MembershipProvider获取未加密的密码
本文关键字:密码 加密 MembershipProvider 获取 | 更新日期: 2023-09-27 17:59:38
我想获得未加密的用户密码。如何得到这个?
public static string GetCurrentUserPassword(string userName)
{
MembershipProvider p = (MembershipProvider)Membership.Providers["Default"];
MembershipUser obj = Membership.GetUser(userName);
return obj.GetPassword();
}
obj type : [Telerik.Sitefinity.Security.Model.User] = User "user1", Id={59d9813c-f88e-4790-9f19-3145ba8347d1}, Provider="Default"
password : "+HmReh/mzvIIuvYsM7+XdEoeQhI="
为什么希望能够获得未加密的密码?
你唯一能想到的是使用存储的密码来检查用户输入的密码的有效性。对于单向哈希(以及类似的技术),它涉及对刚输入的密码应用相同的转换(在适当的情况下使用相同的salt),并查看您最终是否得到相同的哈希。
您应该而不是存储任何可逆的密码表示。这意味着,如果攻击者访问了您的数据库(以及任何私钥),他们将可以直接访问您用户的密码——这基本上是不可接受的。(如果每个人都为他们保护的每个资源使用不同的密码,那也没那么糟糕,但很多人没有。)
如果密码配置为哈希而非加密,则无法执行此操作。如果您将成员资格提供程序配置为使用加密密码,那么GetPassword就可以做到这一点。参见密码格式
话虽如此,我当然不能不同意斯基特先生的回答。如果可能的话,你真的应该使用单向散列密码。
要处理忘记密码的情况,请查看ResetPassword。
MembershipUser.GetPassword ()
的文档说明了一切:
如果EnablePasswordRetrieval为false,则成员资格提供程序将返回异常。如果提供程序支持PasswordFormat为Hashed的密码,您将无法检索成员用户的密码,当用户忘记密码时,应考虑使用ResetPassword方法
我想不出你想用任何其他方式读取密码。