Maison >développement back-end >tutoriel php >Comment puis-je stocker et récupérer des mots de passe en toute sécurité à l'aide du cryptage bidirectionnel en PHP ?

Comment puis-je stocker et récupérer des mots de passe en toute sécurité à l'aide du cryptage bidirectionnel en PHP ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-19 12:08:39807parcourir

How Can I Securely Store and Retrieve Passwords Using Two-Way Encryption in PHP?

Cryptage bidirectionnel : stockage des mots de passe récupérables

Introduction

Stockage sécurisé des mots de passe tout en autorisant les utilisateurs de les récupérer pose un défi. Le chiffrement symétrique peut répondre à ce besoin, mais comprendre les nuances de mise en œuvre est crucial.

Chiffrement et déchiffrement en PHP

Pour chiffrer et déchiffrer les mots de passe en PHP, envisagez d'utiliser le bibliothèques mcrypt ou OpenSSL. Voici un exemple utilisant mcrypt :

function encrypt($password, $key)
{
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM);
    return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $password, MCRYPT_MODE_CBC, $iv);
}

function decrypt($encryptedPassword, $key)
{
    $iv = substr($encryptedPassword, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
    $password = substr($encryptedPassword, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
    return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $password, MCRYPT_MODE_CBC, $iv);
}

Algorithme le plus sûr

Le meilleur algorithme de chiffrement dépend du cas d'utilisation spécifique. Pour stocker les mots de passe, AES-256 (Rijndael) en mode CBC ou CTR est généralement considéré comme robuste.

Stockage de clé privée

Le stockage de la clé privée en toute sécurité est essentiel. Une approche recommandée consiste à utiliser une combinaison du mot de passe de l'utilisateur et d'un sel côté serveur. En PHP, cela peut être réalisé en utilisant :

$salt = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
$key = hash('sha256', $userPassword . $salt);

Clé privée comme entrée utilisateur

Si les utilisateurs sont dignes de confiance, leur demander de fournir la clé privée lors de la récupération les mots de passe peuvent offrir une sécurité supplémentaire. Cela protège contre les violations côté serveur.

Risques de sécurité

Les mots de passe cryptés peuvent être vulnérables à :

  • Fuite de clé
  • Attaques par force brute
  • Replay attaques
  • Interception
  • Attaques connues en texte clair

Stratégies d'atténuation

Pour atténuer ces risques, mettez en œuvre :

  • Algorithmes de cryptage puissants
  • Clé sécurisée stockage
  • Hachage de mot de passe
  • Délai d'attente lors des tentatives de décryptage
  • Authentification à deux facteurs

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn