219 votes

Quelle est la meilleure façon d'utiliser PHP pour crypter et décrypter les mots de passe ?

Duplicata possible :
Cryptage bidirectionnel PHP : J'ai besoin de stocker des mots de passe qui peuvent être récupérés

J'ai l'intention de stocker sur mon site web des informations sur les comptes étrangers de mes utilisateurs, comme les noms d'utilisateur et les mots de passe de rapidshare, etc... Je veux garder les informations en sécurité, mais je sais que si je hachais leurs informations, je ne pourrais pas les récupérer pour un usage ultérieur.

Base64 est décryptable, il n'y a donc aucun intérêt à l'utiliser. Mon idée est de brouiller l'utilisateur et le mot de passe avant et après qu'il soit base64é, de cette façon, même après l'avoir décrypté, vous obtiendrez un texte étrange si vous essayez de le décrypter. Il existe une fonction php qui accepte des valeurs qui feront un brouillage unique d'une chaîne et le dé-brouilleront plus tard quand la valeur sera réinitialisée ?

Des suggestions ?

3voto

Ants Aasma Points 22921

Cela ne vous donnera qu'une protection marginale. Si l'attaquant peut exécuter un code arbitraire dans votre application, il peut accéder aux mots de passe exactement de la même manière que votre application. Vous pouvez toujours obtenir une certaine protection contre les attaques par injection SQL et les sauvegardes de base de données mal placées si vous stockez une clé secrète dans un fichier et que vous l'utilisez pour crypter les données vers la base de données et les décrypter à la sortie. Mais vous devriez utiliser bindparams pour éviter complètement le problème de l'injection SQL.

Si vous décidez de crypter, vous devez utiliser une bibliothèque de cryptographie de haut niveau, ou vous devez volonté se trompent. Il faut que la configuration des clés, le remplissage des messages et les contrôles d'intégrité soient corrects, sinon tous vos efforts de cryptage ne serviront pas à grand-chose. GPGME est un bon choix à titre d'exemple. Mcrypt est d'un niveau trop bas et vous vous tromperez probablement.

2voto

Josh Rice Points 27

Consultez mycrypt() : http://us.php.net/manual/en/book.mcrypt.php

Et si vous utilisez postgres, il y a pgcrypto pour le cryptage au niveau de la base de données. (facilite la recherche et le tri)

1voto

Nikos Tsirakis Points 464

La meilleure idée pour crypter/décrypter vos données dans la base de données, même si vous avez accès au code, est d'utiliser deux passes différentes : un mot de passe privé ( user-pass ) pour chaque utilisateur et un code privé pour tous les utilisateurs ( system-pass ).

Scénario

  1. user-pass est stocké avec md5 dans la base de données et est utilisé pour valider la connexion de chaque utilisateur au système. Ce laissez-passer est différents pour chaque utilisateur.
  2. Chaque entrée d'utilisateur dans la base de données a en md5 un system-pass pour le cryptage/décryptage des données. Ce laissez-passer système est le même pour chaque utilisateur.
  3. Chaque fois qu'un utilisateur est retiré du système, toutes les données cryptées sous l'ancien laissez-passer doivent être cryptées à nouveau sous un nouveau laissez-passer afin d'éviter les problèmes de sécurité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X