首页 新闻 会员 周边

Membership如何获取用户的原始密码

1
悬赏园豆:5 [已关闭问题]

使用Membership时使用了Hashed的加密方式,在程序中如果使用MembershipUser.GetPassword()方法无法取得用户密码,提示"This Membership Provider has not been configured to support password retrieval.",查过MSDN说Hashed方式加密的密码无法进行解密获取。没办法,后来想通过它的重载方法MembershipUser.GetPassword(string answer),可查询数据库,密码恢复的问题答案也是加密过了的,我现在真是一点办法都没有了,请高手们帮忙,谢谢!

iLove.Net的主页 iLove.Net | 初学一级 | 园豆:140
提问于:2009-01-09 14:06
< >
分享
其他回答(3)
0

看看这个,可能会对你有帮助

http://space.cnblogs.com/question/4415/

GUO Xingwang | 园豆:3885 (老鸟四级) | 2009-01-09 15:05
0

出于安全考虑,你是获取不到了……Hashed是不可逆的

Gray Zhang | 园豆:17610 (专家六级) | 2009-01-09 16:41
0

查看SqlMembershipProvider的实现:

首先你要设置EnablePasswordRetrieval为true ,

其次如果采用的是明文存储密码的话,能获取到,如果加密了,无法获取(参考UnEncodePassword方法)。

细节自己反编译查看吧。

public override string GetPassword(string username, string passwordAnswer)
{
if (!this.EnablePasswordRetrieval)
{
throw new NotSupportedException(SR.GetString("Membership_PasswordRetrieval_not_supported"));
}
SecUtility.CheckParameter(
ref username, true, true, true, 0x100, "username");
string encodedPasswordAnswer = this.GetEncodedPasswordAnswer(username, passwordAnswer);
SecUtility.CheckParameter(
ref encodedPasswordAnswer, this.RequiresQuestionAndAnswer, this.RequiresQuestionAndAnswer, false, 0x80, "passwordAnswer");
int passwordFormat = 0;
int status = 0;
string pass = this.GetPasswordFromDB(username, encodedPasswordAnswer, this.RequiresQuestionAndAnswer, out passwordFormat, out status);
if (pass != null)
{
return base.UnEncodePassword(pass, passwordFormat);
}
string exceptionText = this.GetExceptionText(status);
if (this.IsStatusDueToBadPassword(status))
{
throw new MembershipPasswordException(exceptionText);
}
throw new ProviderException(exceptionText);
}




UnEncodePassword方法:

Code

5yplan | 园豆:1330 (小虾三级) | 2009-01-09 17:23
0

为了安全起见,一般成形的系统是不会明文储存密码的,所以用户无法找回密码。

这些系统处理密码丢失问题时都是先确认用户是否是帐户所有者,当确认后,会自动随机生成一个新的密码,并再次对这个密码加密覆盖掉原密码,然后将这个新密码用邮件发送给用户。用户可以用这个密码登录系统并重新设置自己的密码。

这样可以基本保证就算数据库外泄,用户密码信息还是安全的。

如果楼主需要返回原密码的话,那么在加密的时候就应该使用可逆算法吧,但这样又不安全了。

大天使 | 园豆:210 (菜鸟二级) | 2009-01-10 17:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册