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())
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 :
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 }
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!