2012-01-18 9 views
5

Tengo un sitio web y ahora quiero obtener las contraseñas.Las contraseñas hash no se pueden recuperar. Establezca el formato de contraseña en un tipo diferente o establezca enablePasswordRetrieval en falso

lo uso:

<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="/"    
      /> 

Y sucede este error:

ajustes configurados no son válidos: contraseñas con algoritmo hash no se pueden recuperar. Establezca el formato de contraseña en un tipo diferente o establezca enablePasswordRetrieval en falso.

Si lo uso:

<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="/"    
      /> 

consigo el error follwoing:

ha producido una excepción recuperar su contraseña: Este proveedor de suscripciones no se ha configurado para apoyar la recuperación de la contraseña.

Estoy totalmente confundido.

¿Alguna sugerencia sobre dónde puedo comenzar a trabajar?

Respuesta

3

No se pueden obtener las contraseñas porque nunca se guardaron. (Específicamente para garantizar que nadie pueda hacer exactamente lo que está tratando de hacer). La solución no es obtener las contraseñas.

+0

Las contraseñas están en la base de datos. Puedo verlo. Y están encriptados o hash. No lo sé. –

+4

Son hash específicamente para que no se puedan recuperar. No están encriptados, por lo que no se pueden descifrar. Esta es la forma en que se supone que debe hacerse. –

+0

OK. ¿Cómo puedo obtenerlos? Solo quiero usar MembershipUser u = Membership.GetUser (username, false); –

1

Para responder a la pregunta, puede utilizar el método descrito en este enlace: Retrieving the users password

pero nunca haría una cosa como para que su información de usuarios inseguro. Deberías permitir que se "restablezcan" solo, nunca recuperar. No debería ver ni poder recuperar las contraseñas de sus usuarios, y aconsejaría a cualquier persona que no use su aplicación o sitio web debido a esto, pero el método descrito en el enlace funciona.

10

Si desea recuperar las contraseñas o para obtenerlas como texto sin formato (no cifradas), debe cambiar algunas configuraciones de la Membresía antes de crear el primer usuario.

realizar las siguientes tareas (que se relaciona con Asp Net):

1.In el archivo web.config , en la etiqueta de miembros /proveedores/ADD conjunto de atributos:

enablePasswordRetrieval="true"<br/> 
passwordFormat="Encrypted" 

mi configuración:

<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.Generate llamada validationKey y decryptionKey. Usted puede hacer esto mediante la API NET:

mi ejemplo:

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(); 
    } 
} 

generación:

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

3.Una vez más, en el archivo web.config poner los siguientes ajustes dentro de la etiqueta system.web:

<machineKey validationKey="paste here the key64 string" decryptionKey="paste here the key32 string" validation="SHA1"/> 

(about machinkey on msdn)

4.Now puede crear usuarios con contraseñas y luego se puede obtener la contraseña de llanura:

Membership.GetUser(username).GetPassword(); 
+0

La solución proporcionada aquí funciona, pero existen vulnerabilidades de seguridad que deben tenerse en cuenta al usar esta técnica. –

+0

¡Gracias, esto funcionó como un encanto! Impresionante trabajo. – riaandelange

1

Como otros han dicho, la contraseña original no se puede recuperar, y no debe normalmente proporcionar un mecanismo para recuperar las contraseñas una de todos modos (solo reinícialos). Sin embargo, si su objetivo es restablecer la contraseña a algún valor conocido, se puede hacer a través de estas líneas:

MembershipUser usr = Membership.GetUser("username", false); 
string resetPassword = usr.ResetPassword(); 
usr.ChangePassword(resetPassword, "yayiknowthepassword"); 
Cuestiones relacionadas