2010-04-26 14 views
6

Estoy usando require 'digest/sha1' para cifrar mi contraseña y guardarla en la base de datos. Durante el inicio de sesión, me autentico haciendo coincidir la contraseña cifrada guardada en la base de datos y de nuevo encriptada el campo de ingreso de contraseña de un uso. A partir de ahora todo funciona bien, pero ahora quiero hacer la funcionalidad 'Olvidé mi contraseña'. Para hacer esto, necesito descifrar la contraseña que se guarda en la base de datos para encontrar la original. Cómo descifrar usando digest/sha1? ¿O conoce alguien algún algoritmo que admita el cifrado &?Cifrado-descifrado en Rails

Estoy usando Ruby on Rails, así que necesito Ruby para lograrlo.

+0

Una mejor opción sería la de no permitir la recuperación .. Si el usuario olvidó, entonces tienen al usuario elegir una nueva. Es el método más seguro y más barato. – baash05

Respuesta

10

SHA1 es una función de una forma en que no se puede revertir.

Esto puede ser de interés re el restablecimiento de contraseñas: http://www.binarylogic.com/2008/11/16/tutorial-reset-passwords-with-authlogic/

Si usted quiere hacer el cifrado/descifrado, entonces debería usar algo así como AES. Sin embargo, una vez que comiences a utilizar el cifrado/descifrado, también tendrás que empezar a preocuparte por la administración de claves.

En cuanto a su comentario al OP a continuación - si va a almacenar información CC, le aconsejaría que obtenga una persona de seguridad que conozca criptografía, gestión de claves, etc. y que también comprenda los aspectos legales y reglamentarios pertinentes .

+0

Ok, entonces quiero saber Cualquier Algoritham de 2 vías que debería ser capaz de descifrar. por favor, mira mi comentario anterior justo debajo de la respuesta dada por "Horace Ho" – Salil

6

no cifra una contraseña. en su lugar, almacenó el hash de una contraseña (mejor con una sal).

a olvida contraseña generalmente significa (re) autenticación a través de otro canal, por ejemplo, una notificación por correo electrónico de restablecimiento de contraseña.

mira http://railscasts.com/episodes/209-introducing-devise si necesitas algo ya preconstruido.

edición: si realmente necesita el cifrado, Google "ruby openssl"

nunca hay una solución simple para el trabajo seguro. qué tan bueno es su implementación determinada por el debilidad enlace.

así, mi recomendación es, no cuentan en una respuesta corta de la SO ;-)

+0

Lo necesito porque en el futuro quiero guardar algunos datos confidenciales, por ejemplo: - número de tarjeta de crédito. Entonces necesito descifrado también. – Salil

+0

He editado mi (no tan) respuesta con un enlace a "openssl" – ohho

2

Como se explicó Horacio Ho, nunca se debe cifrar una contraseña pero siempre almacenar una sal encriptado.

Sin embargo, está perfectamente bien cifrar otro tipo de datos, como información confidencial. Encryptor es un envoltorio simple pero potente para OpenSSL. Proporciona la capacidad de cifrar/descifrar atributos en cualquier clase.

+0

mientras lo uso tengo un problema cuando guardo los datos encriptados en la base de datos – Salil

+0

¿Qué tipo de problema? –

1

para cifrar bidireccional en otros campos de la base comprobación la attr_enrypted joya

https://github.com/shuber/attr_encrypted

Pero, como otros han dicho que no quieren hacer esto por una contraseña.Las contraseñas deben almacenarse de una manera. En el caso de las contraseñas olvidadas, normalmente les envía un correo electrónico imposible de adivinar que les permitiría elegir una nueva contraseña.

Hay un ejemplo aquí: http://railscasts.com/episodes/274-remember-me-reset-password?view=asciicast