2010-06-10 11 views
8

Estamos creando un nuevo sitio usando el proveedor de membresía ASP.NET para el registro e inicio de sesión del usuario. Nuestro sistema anterior encriptaba contraseñas de usuario para que pudiéramos recuperarlas si era necesario.¿Cómo? Cifrar y descifrar contraseñas de membresía de usuario en ASP.NET

Tengo un gran problema para averiguar si es posible utilizar las funciones de membresía de ASP.NET para simplemente cifrar la contraseña cuando el usuario se registra y luego descifrarla para poder verla.

La documentación para esto es casi inexistente.

Sé cómo configurar Web.config para que almacene contraseñas como ala cifrada passwordFormat = "Encriptado" en el proveedor y asignar una clave de validación en MachineKey, sin embargo, parece que la contraseña aún se obtiene hash (aunque tal vez está bien encriptado). De cualquier forma, no puedo descifrar cómo se puede recuperar la contraseña (por nosotros) si es necesario.

Gracias!

Respuesta

10

Almacenar contraseñas en formato recuperable es una idea muy pobre. Si puede recuperarlos también lo hará cualquier persona que irrumpa en su servidor.

Será mejor que utilice un enfoque estándar hash + salt y tenga un mecanismo de restablecimiento de contraseña para manejar el caso en el que los usuarios olviden su contraseña.

+0

Esta es una posibilidad. Sería muy malo si la información de la cuenta saliera alguna vez. – smdrager

+0

¿El proveedor de membresía de ASP.NET no admite contraseñas encriptadas de forma predeterminada? Esto significa que la contraseña se transmite en texto hash y se almacena en formato db en hash. ¿necesitas más que eso? – ryancrawcour

+1

Solo para aclarar, la membresía ASP.NET admite formatos claros, hash y cifrados listos para usar. Hashed es el valor predeterminado y es de una sola vía (lo mejor para la mayoría de las situaciones). Encriptado permite descifrar la contraseña. – pdavis

0

Supongo que está utilizando el SQLMembershipProvider que suministra MS. Si es así, ¿por qué no utilizar la función integrada de preguntas y respuestas para permitir al usuario restablecer su contraseña? Alternativamente (o adicionalmente) reinicie su contraseña para ellos y envíeles la nueva. De esta forma, su aplicación no puede exponer accidentalmente la contraseña de un usuario.

Si realmente necesita descifrar sus contraseñas, entonces el passwordFormat debe establecerse en "Encrypted". Consulte DecryptPassword para obtener información sobre cómo descifrar la contraseña. Para obtener detalles sobre cómo configurar para el descifrado, consulte PasswordFormat, tenga en cuenta que dice que debe especificar el atributo decryptionKey del elemento machineKey.

+0

Soy consciente de DecryptPassword pero no consigo que VWD2010 lo reconozca como método. No importa las referencias que proporcione o los espacios de nombres que uso. ¿Alguna idea de por qué este es el caso? – smdrager

+0

Intenta usar System.Web.Security.Membership.Default.DecryptPassword. DecryptPassword es parte de la firma de la clase MembershipProvider, por lo que debe estar allí. Tenga en cuenta que System.Web.Security.Membership es una clase estática que no expone los mismos métodos que las clases implementadas. –

1
Imports System.Web.Security 

Public Class PasswordRecovery 
    Inherits SqlMembershipProvider 

    Public Function GetDecryptedPassword(ByVal password As String) As String 
     Try 
      Dim _encodedPassword() As Byte = Convert.FromBase64String(password) 
      Dim _bytes() As Byte = DecryptPassword(_encodedPassword) 
      If _bytes Is Nothing Then 
       Return "" 
      Else 
       Return System.Text.Encoding.Unicode.GetString(_bytes, &H10, _bytes.Length - &H10) 
      End If 
     Catch ex As Exception 
      Throw New Exception("Error decrypting password.", ex) 
     End Try 
    End Function 
End Class 
+0

Dim _bytes() Como Byte = DecryptPassword (_encodedPassword) da error no se puede encontrar DecryptPassword – AMH

+0

[link] (http://msdn.microsoft.com/en-us/library/system.web.security.membershipprovider.decryptpassword.aspx) DecryptPassword MSDN – rob

Cuestiones relacionadas