我有一些网站,现在我想获取密码。
我使用它:
<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网络有关:] >>
1。在文件web.config
中的标记membership / providers / add中设置属性:enablePasswordRetrieval="true"<br/> passwordFormat="Encrypted"
我的设置:
和decryptionKey。您可以通过NET API进行此操作:<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
我的例子:
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(); } }
正在生成:
中,将以下设置放入标记system.web中:string key64 = RNGCrypto_MachineKey.getRandomKey(64); string key32 = RNGCrypto_MachineKey.getRandomKey(32);
3。再次,在文件web.config
<machineKey validationKey="paste here the key64 string" decryptionKey="paste here the key32 string" validation="SHA1"/>
4。现在您可以使用密码创建用户,然后您可以获取普通密码:
Membership.GetUser(username).GetPassword();
正如其他人所说,原始密码无法检索,并且您通常不应该提供一种无论如何都可以恢复密码的机制(只需重设密码)。但是,如果您的目标是将密码重置为某个已知值,则可以按照以下步骤进行操作:
要回答问题,您可以使用此链接中概述的方法:Retrieving the users password
这是经过过多搜索后得到的最佳答案。在默认页面的页面加载中使用它并重置密码。注意*:-确保使用此设置更改webconfig文件enablePasswordRetrieval =“ true” passwordFormat =“ Encrypted”