2010-04-26 5 views
6

J'utilise require 'digest/sha1' pour crypter mon mot de passe et enregistrer dans la base de données. Pendant la connexion, je m'authentifie en faisant correspondre le mot de passe chiffré enregistré dans la base de données et de nouveau crypté le champ Utiliser un mot de passe. A partir de maintenant tout fonctionne bien, mais maintenant je veux faire la fonctionnalité "Mot de passe oublié". Pour ce faire, je dois déchiffrer le mot de passe qui est enregistré dans la base de données pour trouver l'original. Comment décrypter en utilisant digest/sha1? Ou est-ce que quelqu'un connaît un algorithme qui prend en charge le chiffrement & également? J'utilise du rubis sur des rails, j'ai donc besoin de Ruby pour l'accomplir.Cryptage-décryptage dans les rails

+0

Une meilleure option serait de ne pas permettre la récupération .. Si l'utilisateur a oublié, alors que l'utilisateur de choisir un nouveau. C'est la méthode la plus sûre et la moins chère. – baash05

Répondre

10

SHA1 est une fonction à sens unique, vous ne pouvez pas inverser.

Cela peut être d'intérêt nouveau mot de passe remet à zéro: http://www.binarylogic.com/2008/11/16/tutorial-reset-passwords-with-authlogic/

Si vous voulez faire le chiffrement/déchiffrement alors vous devriez utiliser quelque chose comme AES. Cependant, une fois que vous aurez commencé à utiliser le cryptage/décryptage, vous devrez également vous préoccuper de la gestion des clés. En ce qui concerne votre commentaire sur l'OP ci-dessous - si vous allez stocker des informations CC, je vous conseille d'avoir une personne de sécurité qui connait la crypto, la gestion des clés etc. et qui comprend également les aspects juridiques et réglementaires pertinents .

+0

Ok alors je veux savoir Tout 2way Algoritham que je devrais pouvoir déchiffrer. s'il vous plaît regarder mon commentaire précédent juste ci-dessous réponse donnée par "Horace Ho" – Salil

6

ne pas crypter un mot de passe. à la place, stocké le hachage d'un mot de passe (mieux avec un sel). Un mot de passe signifie généralement (ré) authentification via un autre canal, par exemple, une notification par e-mail de la réinitialisation du mot de passe.

regarder http://railscasts.com/episodes/209-introducing-devise si vous avez besoin de quelque chose déjà pré-construit.

modifier: si vous avez vraiment besoin de chiffrement, google "rubis OpenSSL"

il n'y a jamais une solution simple pour un travail sécurisé. comment bon votre mise en œuvre est déterminée par le lien faiblesse.

donc, ma recommandation est, ne comptez pas sur une réponse courte sur le SO ;-)

+0

J'en ai besoin parce qu'à l'avenir je veux sauver quelques données confidentielles par ex: - numéro de carte de crédit. J'ai donc besoin de décryptage aussi. – Salil

+0

J'ai édité ma (pas si) réponse avec un lien vers "openssl" – ohho

2

Comme Horace Ho a expliqué, vous ne devriez jamais chiffrer un mot de passe, mais toujours stocker un sel encrypté.

Toutefois, il est parfaitement possible de crypter d'autres types de données, telles que des informations confidentielles. Encryptor c'est un wrapper simple mais puissant pour OpenSSL. Il offre la possibilité de crypter/décrypter des attributs dans n'importe quelle classe.

+0

lors de l'utilisation j'ai un problème lorsque je sauvegarde les données cryptées dans la base de données – Salil

+0

Quel genre de problème? –

1

Pour chiffrement bidirectionnel sur d'autres champs de la base extraira le attr_enrypted joyau

https://github.com/shuber/attr_encrypted

Mais comme d'autres ont mentionné que vous ne voulez pas le faire sur un mot de passe.Les mots de passe doivent être stockés dans un sens. Pour les fonctionnalités de mot de passe oublié, vous leur envoyez généralement par e-mail une URL impossible à deviner qui leur permettrait de choisir un nouveau mot de passe.

Il y a un exemple: http://railscasts.com/episodes/274-remember-me-reset-password?view=asciicast