Maison  >  Article  >  développement back-end  >  Comment utiliser le générateur de nombres pseudo-aléatoires cryptographiques avec PHP

Comment utiliser le générateur de nombres pseudo-aléatoires cryptographiques avec PHP

醉折花枝作酒筹
醉折花枝作酒筹avant
2021-05-27 17:46:211877parcourir

Cet article vous présentera comment utiliser le générateur de nombres pseudo-aléatoires cryptés en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Comment utiliser le générateur de nombres pseudo-aléatoires cryptographiques avec PHP

Aujourd'hui, nous présenterons le générateur de nombres pseudo-aléatoires cryptés (extension CSPRNG) en PHP . La génération de nombres aléatoires est en fait très simple, il suffit d'utiliser la fonction rand() ou mt_rand(), mais ce dont nous parlons aujourd'hui est un ensemble de générateurs de nombres aléatoires qui utilisent un algorithme plus complexe. rand() n'est plus recommandé. mt_rand() génère plus rapidement et est désormais une fonction courante. La fonction de génération de nombres pseudo-aléatoires cryptés est cryptographiquement sécurisée et légèrement plus lente que mt_rand(). Il doit s'appuyer sur certaines fonctions du système d'exploitation, dont nous parlerons plus tard.

Cette extension de chiffrement a été intégrée à PHP7 et ne nécessite pas d'installation particulière. S'il s'agit d'une version inférieure à PHP7, vous devez installer l'extension indépendamment. Si vous ne trouvez pas les fonctions décrites ci-dessous lors du test, vérifiez votre version actuelle de PHP.

Génération de caractères pseudo-aléatoires

var_dump(bin2hex(random_bytes(5)));
// string(10) "f28dc2bdd5"
var_dump(random_bytes(5));
// string(5) "�"��"

random_bytes() Chaque appel générera une chaîne binaire avec un contenu différent, et le paramètre est la longueur de l'octet binaire. Les données binaires obtenues directement sont dans un format tronqué, nous devons donc généralement utiliser bin2hex() pour convertir le binaire en une chaîne au format hexadécimal que nous pouvons comprendre. Cependant, le résultat est que la longueur des caractères hexadécimaux après notre conversion est le double de la longueur des caractères que nous avons définie. La fonction de cette fonction peut générer pour nous un sel de mot de passe utilisateur sécurisé, un mot-clé clé ou un vecteur d'initialisation.

random_bytes() générera une chaîne avec un contenu différent à chaque appel, et le paramètre est un caractère aléatoire de longueur de caractère. Ici, nous passons 5 et renvoyons 10 caractères. Le nombre de caractères, et ce qui est renvoyé est en fait le nombre d'octets, correspondant au formulaire de retour dans lequel un caractère occupe deux octets. Ou nous pouvons simplement nous rappeler qu'il renvoie deux fois les paramètres. Quant au rôle de cette fonction, elle peut générer pour nous un sel de mot de passe utilisateur sécurisé, un mot-clé clé ou un vecteur d'initialisation.

Génération d'entiers pseudo-aléatoires

var_dump(random_int(100, 999));
var_dump(random_int(-1000, 0));
// int(900)
// int(-791)

Pour la génération de nombres entiers, c'est encore plus simple. Fournissez simplement deux paramètres pour la fonction random_int(), qui est la plage d'entiers aléatoires. En fait, l'utilisation est la même que celle de mt_rand().

Source de génération

Les sources de génération des deux fonctions pseudo-aléatoires chiffrées ci-dessus dépendent du système d'exploitation, comme suit :

  • Sous Windows Systems , la fonction CryptGenRandom() sera utilisée. À partir de la version 7.2.0, lors de l'utilisation de CNG-API

  • dans le système Linux, l'appel système Linux getrandom(2) sera utilisé

  • dans d'autres systèmes, /dev/urandom

  • Sinon, une exception sera levée

Exception

Ces deux fonctions ont également Des situations anormales correspondantes se produiront.Par exemple, si la source de génération ne peut pas être trouvée ci-dessus, une exception sera levée. Bien sûr, en plus de cela, il y aura également d'autres facteurs qui provoqueront également des exceptions.

  • Si aucune source aléatoire appropriée n'est trouvée, une exception sera levée

  • Si l'argument donné n'est pas valide, une TypeError sera levée

  • Si la longueur d'octet donnée n'est pas valide, une erreur sera générée

Résumé

Le contenu d'aujourd'hui est très simple et également trouvé Avec l'utilisation instantanée de la fonction random_bytes(), vous n'avez plus besoin d'écrire vous-même une fonction pour générer du sel de manière aléatoire. Tout comme dans notre article sur le salage de mot de passe, qu'est-ce que "saler" un mot de passe ? Comment « saler » en toute sécurité vos mots de passe utilisateur ? La fonction de génération de caractères aléatoires (generateSalt) peut en principe être remplacée par ceci. Ne sentez-vous pas que vous avez beaucoup gagné ? Le rythme de l’apprentissage ne s’arrête jamais. Continuons à explorer ensemble des contenus plus intéressants ! !

Code de test :

https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84%E5%8A%A0%E5%AF%86%E4%BC%AA%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90%E5%99%A8%E7%9A%84%E4%BD%BF%E7%94%A8.php

Apprentissage recommandé : Tutoriel vidéo php

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer