2009-10-12 10 views
1

Je souhaite crypter le mot de passe dans JQuery et le décrypter dans les servlets. S'il vous plaît dites-moi quel algorithme dois-je utiliser et comment mettre en œuvre cette chose.Chiffrement du mot de passe

+7

Idéalement, vous devez utiliser uniquement un cryptage unidirectionnel pour les mots de passe. En d'autres termes, ne les décryptez jamais. – Rahul

+0

Ce n'est pas vraiment le cryptage que vous utilisez avec les mots de passe mais le hachage. – whatnick

+0

@Rahul et whatnick: vrai, mais vous devriez le faire sur le serveur, sinon c'est comme créer des mots de passe aléatoires, et les transférer en texte brut sur le fil. –

Répondre

0

Un simple spot de googling aurait obtenu le answer. Les algorithmes disponibles semblent être Blowfish, SHA et Rc4. Si vous voulez décrypter blowfish serait le chemin à parcourir. Pour les ensembles de données plus petits, vous pouvez utiliser rc4.

Pour un exemple pratique, regardez comment Yahoo fait ses logins. Le formulaire de connexion a un champ caché qui agit comme le sel appelé ".challenge", ceci est incorporé dans le hachage comme suit: fullhash=MD5(MD5(passwd)+challenge)

+0

SHA n'est pas le cryptage mais le hachage, donc vous ne pouvez pas l'utiliser. Blowfish, AES, RC4, tripleDES sont les algorithmes de cryptage les plus courants – Henri

+0

@Henri: Je préfère hacher un mot de passe que crypter en termes de pages Web. – Zed

+0

@Henri: Je ne faisais que commenter les plugins disponibles pour Jquery et @Zed oui hash est le chemin à parcourir. L'OP pourrait simplement vouloir être capable de récupérer les mots de passe. – whatnick

0

Ceci est un problème de chiffrement classique. Les hachages à sens unique décrits par whatnick fonctionneront mais il y a des problèmes de sécurité. Notamment, un attaquant peut effectuer une attaque de rejeu puisque le hachage ne peut pas être salé, ce qui signifie que l'utilisateur peut seulement envoyer le hash correspondant à l'hast stocké dans la base de données. En d'autres termes, c'est presque la même chose que d'envoyer le mot de passe en texte brut.

La seule façon de le faire correctement est avec un chiffrement de clé publique non symétrique tel que RSA. J'ai vu un Javascript implementation here. Je dirais que c'est plus compliqué que nécessaire et que faire une connexion sécurisée via SSL est probablement la chose la plus sûre et la plus facile à long terme.

4

Vous souhaitez utiliser HMAC. Fondamentalement, vous envoyez 2 sels au client. Vous stockez dans votre base de données

md5(salt + pwd)

vous envoyer un salt2 unique et le sel db à l'utilisateur final, qui retourne

md5(salt2 + md5(salt + pwd))

puis vous comparez à ce même côté serveur d'opération .

Tant que vous faites varier le sel envoyé et n'acceptez pas les anciens, il est à peu près aussi sûr que vous obtiendrez sans SSL. Vous ne voulez certainement pas essayer d'utiliser AES ou RSA quelque chose de similaire.

Si vous n'aimez pas md5, utilisez un autre algorithme de hachage de votre choix.

+0

Juste comme j'ajoutais l'échantillon de yahoo. – whatnick

+0

Clever. Vis et apprend! – Steve

1

En ce qui concerne la façon de la mettre en œuvre, les choses ont évolué depuis la question a été soulevée et il semble que CryptoJS devrait le rendre facile:

http://code.google.com/p/crypto-js/

NOTE - Je n'ai pas utilisé encore!

Questions connexes