2010-09-21 7 views
0

J'essaie de créer un algorithme de cryptage bidirectionnel pour les mots de passe de mes utilisateurs. J'ai besoin qu'il soit crypté mais sans le cryptage pré-défini (ce que je définis) (salt?) Le mot de passe original ne peut pas être décryptéCryptage bidirectionnel PHP avec Salt

+1

Les données cryptées peuvent toujours être décryptées en utilisant la même clé. C'est la [définition du cryptage] (http://en.wikipedia.org/wiki/Encryption). Je suppose que vous voulez plutôt dire [hachage cryptographique] (http://en.wikipedia.org/wiki/Cryptographic_hash_function). – Gumbo

Répondre

2

Il semble que vous vouliez utiliser un hachage cryptographique unidirectionnel plutôt que deux- cryptage de manière. Voici un bon exemple de meilleures pratiques de stockage et de validation passe:

pour l'enregistrer:

$ userPasswordInput = $ _POST [ 'password'];

$ sel = // idéalement, générer un hasard et enregistrez-le db, sinon, utilisez une constante enregistrée dans le fichier php

$ password = SHA1 (userPasswordInput $ $ sel.);

Enregistrer le mot de passe $ (et de préférence $ salt) dans le db. Lors de la comparaison, concaténer le sel et l'entrée de l'utilisateur, sha1 it (ou quel que soit le cryptage), puis le comparer au mot de passe sauvegardé (crypté + salé).

+0

Je suppose que cela fonctionnerait pour le cryptage mais. Je ne peux pas le décrypter et récupérer le mot de passe en utilisant le $ salt ?? – Daniel

2

Pour un cryptage bidirectionnel, cela s'appelle "clé", pas "sel". Découvrez les fonctions mcrypt.

+1

Je vais l'utiliser sur plusieurs serveurs/sites exécutant PHP. la plupart n'ont pas cette extension installée. Il serait difficile de mettre à jour tous les serveurs/sites. – Daniel

+0

J'ai besoin de quelque chose qui est intégré dans php – Daniel

+0

Je cherche simplement quelques fonctions que je peux utiliser pour encoder et décoder un hachage, je veux qu'un hachage soit seulement décodable si la clé correcte a été utilisée (celle entrée lors de l'encodage) – Daniel

0

je l'ai fait de cette façon:

créer un utilisateur $ + mot de passe

$saltedHash = md5($salt.$password); 

maintenant vous avez un mot de passe crypté (saltedHash $) pour l'enregistrer dans la db.

Si quelqu'un tente de se connecter, vous faites de même avec le mot de passe entré et le comparez avec celui de la base de données.

0

Le moyen le plus simple (bien que très inutile en terme de stockage) est de générer une chaîne aléatoire et de la renvoyer au mot de passe. (Comme quelqu'un l'a déjà souligné, cela s'appelle une clé, pas un sel.) Cela s'appelle un one-time pad. Comme son nom l'indique, vous ne pouvez pas réutiliser la même clé pour plusieurs mots de passe.