Maison > développement back-end > tutoriel php > Aléatoire en PHP - vous sentez-vous chanceux?

Aléatoire en PHP - vous sentez-vous chanceux?

Christopher Nolan
Libérer: 2025-02-16 11:34:09
original
150 Les gens l'ont consulté

Cet article examine les défis de l'utilisation de la génération de nombres aléatoires dans la cryptographie, mettant en évidence les différences entre PHP 5 et PHP 7. PHP 5 manque de mécanismes facilement disponibles pour générer des nombres aléatoires cryptographiquement sécurisés, tandis que PHP 7 introduit random_bytes et random_int fonctions à cet effet.

Randomness in PHP - Do You Feel Lucky?

Comprendre les csprngs

Un générateur de nombres pseudorandom cryptographiquement sécurisé (CSPRNG) est un PRNG conçu pour les applications cryptographiques. Sa caractéristique clé est le caractère aléatoire de haute qualité, crucial pour:

  • Génération de clés
  • Création de mot de passe aléatoire
  • Algorithmes de chiffrement

CSPRNGS dans PHP 7

php 7 fournit random_bytes (renvoyant une chaîne de longueur d'octets spécifiée) et random_int (renvoyant un entier aléatoire dans une plage donnée) pour la fonctionnalité CSPRNG.

random_bytes Exemple:

$bytes = random_bytes(10);
var_dump(bin2hex($bytes));
// Possible output: string(20) "7dfab0af960d359388e6"
Copier après la connexion
Copier après la connexion

random_int Exemple:

var_dump(random_int(1, 100));
// Possible output: 27
Copier après la connexion
Copier après la connexion

Ces fonctions utilisent diverses sources d'aléatoire en fonction du système d'exploitation, en hiérarchisant des options sécurisées comme CryptGenRandom (Windows), arc4random_buf (BSD), getrandom(2) (Linux) et enfin /dev/urandom comme secours. Une erreur est lancée si aucune source appropriée n'est trouvée.

Tester le hasard

L'évaluation de la qualité d'un générateur de nombres aléatoires implique des tests statistiques. Un exemple simple consiste à simuler des rouleaux de dés. La distribution attendue des résultats pour le roulement de trois dés 1 000 000 fois peut être comparée aux résultats réels générés par random_int et à la fonction standard rand.

Un exemple de code (simplifié pour la concision) et un graphique comparatif (illustré ci-dessous) démontrent que random_int présente une distribution plus proche des valeurs attendues, indiquant une aléances supérieure par rapport à rand.

Randomness in PHP - Do You Feel Lucky?

PHP 5 Alternatives

PHP 5 manque de CSPRNG intégrés. Les solutions de contournement incluent openssl_random_pseudo_bytes(), mcrypt_create_iv() ou l'accès direct à /dev/random ou /dev/urandom. Des bibliothèques comme Randallib ou Libsodium proposent des solutions supplémentaires.

la random_compat bibliothèque

Pour la compatibilité PHP 5, la bibliothèque de Paragon Initiative Enterprises random_compat fournit la fonctionnalité random_bytes et random_int. Il peut être installé via le compositeur (composer require paragonie/random_compat) et utilisé comme suit:

$bytes = random_bytes(10);
var_dump(bin2hex($bytes));
// Possible output: string(20) "7dfab0af960d359388e6"
Copier après la connexion
Copier après la connexion

Cette bibliothèque priorise différentes sources d'aléatoire par rapport à PHP 7, en commençant par /dev/urandom.

Un exemple de génération de mots de passe simple utilisant random_compat:

var_dump(random_int(1, 100));
// Possible output: 27
Copier après la connexion
Copier après la connexion

Conclusion

L'utilisation d'un CSPRNG est cruciale pour les applications sécurisées. La bibliothèque random_compat offre une solution compatible en arrière pour PHP 5, tandis que les développeurs PHP 7 devraient utiliser directement random_bytes et random_int. La priorisation de la génération de nombres aléatoires fiables améliore considérablement la sécurité des applications.

lecture plus approfondie

Description Link
Die Hard Test https://www.php.cn/link/1852a2083dbe1c2ec33ab9366feb2862
Chi-square test with dice example https://www.php.cn/link/fb6a253729096c1e92e43c26a6fdadc3
Kolmogorov-Smirnov Test https://www.php.cn/link/030d13e49bb7d1add5ac5ea2e4a43231
Spectral Test https://www.php.cn/link/6bbd80b04535d39be5e02dbfd8730469
RaBiGeTe test suite https://www.php.cn/link/e626afbcdb83368b3491c0c473da19f1
Random Number Generation In PHP (2011) https://www.php.cn/link/f7ff233e4ed3e6b13c5d5c7a9201e4ec
Testing RNG part 1 and 2 https://www.php.cn/link/a1c71b134d46d7f7ff00f488874a8d43, https://www.php.cn/link/2e3517ba49c2a7c999b9c8381185ae4e

remerciements

Merci à Scott Arciszewski pour leur aide à l'examen par les pairs.

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 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