Maison > développement back-end > tutoriel php > Comment puis-je crypter et déchiffrer les mots de passe en toute sécurité à l'aide de PHP ?

Comment puis-je crypter et déchiffrer les mots de passe en toute sécurité à l'aide de PHP ?

Mary-Kate Olsen
Libérer: 2024-12-28 10:05:10
original
459 Les gens l'ont consulté

How Can I Securely Encrypt and Decrypt Passwords Using PHP?

Gérer les mots de passe en toute sécurité : cryptage et déchiffrement

Lors du stockage de données sensibles telles que les mots de passe, il est crucial d'employer des mesures de sécurité appropriées. Bien que les fonctions de hachage soient utilisées pour sécuriser les mots de passe de manière irréversible, il peut y avoir des cas où un cryptage réversible est souhaité.

Malgré les idées fausses entourant la base64 comme méthode de cryptage valide, elle reste une technique d'encodage simple. Au lieu de cela, nous explorons une approche plus sécurisée pour crypter et déchiffrer les mots de passe, qui implique la création d'un brouillage unique pour modifier les données avant et après l'encodage base64.

Pour implémenter cette méthode, nous définissons une clé ("mot de passe pour (en/de)crypt") et une chaîne à chiffrer (" chaîne à chiffrer ").

Chiffrement Processus

$iv = mcrypt_create_iv(
    mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC),
    MCRYPT_DEV_URANDOM
);

$encrypted = base64_encode(
    $iv .
    mcrypt_encrypt(
        MCRYPT_RIJNDAEL_128,
        hash('sha256', $key, true),
        $string,
        MCRYPT_MODE_CBC,
        $iv
    )
);
Copier après la connexion

Ce code lance le processus de cryptage en créant un vecteur d'initialisation (IV) et en utilisant un algorithme de hachage fort (SHA-256) pour générer la clé de cryptage à partir de la clé fournie. Les données sont ensuite cryptées à l'aide d'un algorithme de cryptage hautement sécurisé (RIJNDAEL-128) en mode CBC. Le résultat chiffré est ensuite codé en base64 pour produire une chaîne obscurcie.

Processus de décryptage

$data = base64_decode($encrypted);
$iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));

$decrypted = rtrim(
    mcrypt_decrypt(
        MCRYPT_RIJNDAEL_128,
        hash('sha256', $key, true),
        substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)),
        MCRYPT_MODE_CBC,
        $iv
    ),
    ""
);
Copier après la connexion

Le processus de décryptage inverse la séquence de chiffrement. La chaîne codée en base64 est décodée et le IV est récupéré. La clé de cryptage est recalculée et les données sont déchiffrées à l'aide du IV et de la clé d'origine. Enfin, tous les octets nuls de fin sont supprimés, ce qui donne la chaîne de texte en clair d'origine.

Attention : Il est important de noter que le code fourni, bien qu'efficace pour illustrer le processus de cryptage/déchiffrement, est non destiné à une utilisation en production sous sa forme actuelle. Il manque de mécanismes d’authentification appropriés et d’autres mesures de sécurité essentielles à la protection des données sensibles. Lorsque vous traitez le cryptage de mots de passe, utilisez toujours des techniques de cryptage authentifiées et référez-vous aux meilleures pratiques établies du secteur pour obtenir des conseils.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal