Maison > développement back-end > tutoriel php > Comment puis-je générer en toute sécurité des nombres aléatoires en PHP pour des applications telles que la réinitialisation de mot de passe ?

Comment puis-je générer en toute sécurité des nombres aléatoires en PHP pour des applications telles que la réinitialisation de mot de passe ?

Patricia Arquette
Libérer: 2024-12-01 15:53:12
original
221 Les gens l'ont consulté

How Can I Securely Generate Random Numbers in PHP for Applications Like Password Reset?

Génération sécurisée de nombres aléatoires en PHP : un aperçu complet

La cryptographie nécessite souvent la génération de nombres aléatoires imprévisibles. En PHP, la fonction "mt_rand" ne répond pas à ces exigences. Cet article explore une méthode sécurisée de génération de nombres aléatoires dans PHP lui-même, abordant le problème des mots de passe oubliés.

La solution initialement proposée consiste à stocker une graine et à la mettre à jour à chaque appel, comme suit :

result = seed
seed = sha512(seed . mt_rand())
Copier après la connexion

Cependant, cette approche présente des inconvénients importants. La fonction sha512 n'améliore pas l'entropie comme par magie, et l'appel "mt_rand" est insuffisant pour contrecarrer un adversaire. Au lieu de cela, il est conseillé d'utiliser les sources d'entropie fournies par les systèmes d'exploitation modernes :

  • Plateformes Unix : "/dev/urandom"
  • Plateformes Windows : API cryptographique

Voici un extrait de code PHP pour générer un aléatoire sécurisé de 128 bits string :

$pr_bits = '';
if (file_exists("/dev/urandom")) {
    $fp = fopen('/dev/urandom','rb');
    $pr_bits .= fread($fp, 16);
    fclose($fp);
} elseif (class_exists('COM')) {
    try {
        $CAPI_Util = new COM('CAPICOM.Utilities.1');
        $pr_bits .= $CAPI_Util->GetRandom(16, 0);
        if ($pr_bits) { $pr_bits = md5($pr_bits, TRUE); }
    } catch (Exception $ex) {
        // echo 'Exception: ' . $ex->getMessage();
    }
}

if (strlen($pr_bits) < 16) {
    // Inform the administrator of the missing pseudorandom generator
}
Copier après la connexion

N'oubliez pas d'inclure les deux tentatives de source d'entropie dans votre code pour une portabilité maximale. Bien que cette méthode ne soit pas infaillible, elle offre une amélioration significative de la sécurité par rapport à l'approche initiale basée sur les semences.

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