无法检索散列的密码。可以将密码格式设置为其他类型,或者将enablePasswordRetrieval设置为false

问题描述 投票:5回答:5

我有一些网站,现在我想获取密码。

我使用它:

<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider"
             connectionStringName="TravelChamps" 
enablePasswordRetrieval="true"
             enablePasswordReset="true"
             requiresQuestionAndAnswer="false"
             requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" 
             minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"             
             />

并且发生此错误:

配置的设置无效:无法获取散列的密码。可以将密码格式设置为其他类型,也可以将enablePasswordRetrieval设置为false。

如果我使用它:

<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider"
             connectionStringName="TravelChamps" enablePasswordRetrieval="false"
             enablePasswordReset="true"
             requiresQuestionAndAnswer="false"
             requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" 
             minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"             
             />

我收到以下错误:

检索密码时发生异常:此成员资格提供程序尚未配置为支持密码检索。

我完全感到困惑。

任何建议我可以在哪里开始工作?

asp.net .net asp.net-mvc-2
5个回答
3
投票

您无法获得密码,因为它们从未存储过。 (特别是要确保没有人能够完全按照您的意图进行操作。)解决方法是不获取密码。


10
投票

如果您希望密码可以检索或以纯文本格式(不加密)获得,则必须在创建第一个用户之前更改“成员资格”的某些配置。

执行以下任务(与ASP网络有关:] >>

1。在文件web.config

中的标记membership / providers / add中设置属性:
enablePasswordRetrieval="true"<br/>
passwordFormat="Encrypted"

我的设置:

<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider"     connectionStringName="maindb"
         enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
         applicationName="/" passwordFormat="Encrypted" />
  </providers>
</membership>

2。生成所谓的validationKey

decryptionKey。您可以通过NET API进行此操作:

我的例子:

public static class RNGCrypto_MachineKey
{
    public static string getRandomKey(int bytelength)
    {
        byte[] buff = new byte[bytelength];
        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
        rng.GetBytes(buff);
        StringBuilder sb = new StringBuilder(bytelength * 2);
        for (int i = 0; i < buff.Length; i++)
            sb.Append(string.Format("{0:X2}", buff[i]));
        return sb.ToString();
    }
}

正在生成:

string key64 = RNGCrypto_MachineKey.getRandomKey(64);
string key32 = RNGCrypto_MachineKey.getRandomKey(32);

3。再次,在文件web.config

中,将以下设置放入标记system.web中:
    <machineKey validationKey="paste here the key64 string" decryptionKey="paste here the key32 string" validation="SHA1"/>

about machinkey on msdn

4。现在您可以使用密码创建用户,然后您可以获取普通密码:

Membership.GetUser(username).GetPassword();

2
投票

正如其他人所说,原始密码无法检索,并且您通常不应该提供一种无论如何都可以恢复密码的机制(只需重设密码)。但是,如果您的目标是将密码重置为某个已知值,则可以按照以下步骤进行操作:


1
投票

要回答问题,您可以使用此链接中概述的方法:Retrieving the users password


1
投票

这是经过过多搜索后得到的最佳答案。在默认页面的页面加载中使用它并重置密码。注意*:-确保使用此设置更改webconfig文件enablePasswordRetrieval =“ true” passwordFormat =“ Encrypted”

© www.soinside.com 2019 - 2024. All rights reserved.