MT_SRAND est une fonction d'initialisation d'un générateur de nombres pseudo-aléatoires dans PHP. Il initialise le générateur de nombres aléatoires en définissant la valeur des semences. MT_SRAND est généralement utilisé avec MT_RAND , où MT_RAND est utilisé pour retourner les nombres pseudo-aléatoires. En fournissant à MT_SRAND la même valeur de graines, il est possible de s'assurer que la séquence de nombres aléatoires générée par MT_RAND est la même à chaque fois que l'exécution est exécutée dans les mêmes conditions, ce qui rend les nombres aléatoires générés prévisibles et reproductibles.
<span><span><span class="hljs-title function_ invoke__">mt_srand</span></span><span>(</span><span><span class="hljs-number">12345</span></span><span>); </span><span><span class="hljs-comment">// Réglez la graine du générateur de nombres aléatoires</span></span><span>
</span><span><span class="hljs-variable">$random_number</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mt_rand</span></span><span>(); </span><span><span class="hljs-comment">// Générer des nombres pseudo-aléatoires</span></span><span>
</span></span>
La fonction de hachage convertit les données d'entrée de toute longueur en valeurs de sortie d'une longueur fixe. Le résultat de sortie de la fonction de hachage est généralement irréversible, c'est-à-dire que les données d'origine ne peuvent pas être déduites de la valeur de hachage. Les fonctions de hachage communes incluent MD5 , SHA1 , SHA256 , etc. PHP fournit une variété d'algorithmes de hachage intégrés aux développeurs à utiliser.
<span><span><span class="hljs-variable">$hash_value</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hash</span></span><span>(</span><span><span class="hljs-string">'sha256'</span></span><span>, </span><span><span class="hljs-string">'some input data'</span></span><span>); </span><span><span class="hljs-comment">// utiliser sha256 Hachage d'algorithme</span></span><span>
</span></span>
La fonction de hachage ne se soucie pas de l'aléatoire des données d'entrée, mais ses résultats semblent généralement aléatoires et renvoient toujours le même hachage pour les mêmes données d'entrée.
Pour obtenir des valeurs aléatoires cryptographiques répétables, envisagez d'utiliser les fonctions MT_SRAND et Hash. L'idée de base est d'utiliser la fonction de hachage pour hacher certaines données d'entrée (telles que l'entrée utilisateur, les horodatages ou d'autres variables), puis utilise la valeur de hachage comme graine de MT_SRAND . Cela garantit que la séquence de nombres aléatoires générée sur la base des mêmes données d'entrée est la même à chaque fois qu'elle s'exécute, et le processus de hachage peut augmenter un certain "cryptage" pour réaliser l'effet de valeur aléatoire cryptographique "reproductible".
Sélectionnez les données d'entrée : vous pouvez sélectionner la chaîne, le horodatage ou d'autres paramètres de variable saisis par l'utilisateur en tant que données d'entrée.
Utilisez la fonction de hachage pour générer un hachage de longueur fixe : hachage les données d'entrée pour obtenir un hachage de longueur fixe.
Geinez le hachage comme MT_SRAND : le passe à MT_SRAND pour initialiser le générateur de nombres pseudo-aléatoires en convertissant le hachage en un nombre approprié.
Générez des valeurs aléatoires : utilisez MT_RAND pour générer des nombres aléatoires.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// étape 1: Sélectionnez les données d'entrée</span></span><span>
</span><span><span class="hljs-variable">$input_data</span></span><span> = </span><span><span class="hljs-string">'user_input_123'</span></span><span>; </span><span><span class="hljs-comment">// Par exemple, une chaîne entrée par un utilisateur</span></span><span>
</span><span><span class="hljs-comment">// étape 2: utiliser哈希函数生成哈希值</span></span><span>
</span><span><span class="hljs-variable">$hashed_value</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hash</span></span><span>(</span><span><span class="hljs-string">'sha256'</span></span><span>, </span><span><span class="hljs-variable">$input_data</span></span><span>); </span><span><span class="hljs-comment">// utiliser sha256 L'algorithme génère du hachage</span></span><span>
</span><span><span class="hljs-comment">// étape 3: Convertir la valeur de hachage en nombre,Comme valeur de semence</span></span><span>
</span><span><span class="hljs-variable">$seed</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hexdec</span></span><span>(</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$hashed_value</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">8</span></span><span>)); </span><span><span class="hljs-comment">// Avant d'obtenir le hachage8et convertir les bits en chiffres décimaux</span></span><span>
</span><span><span class="hljs-comment">// étape 4: utiliser mt_srand Initialiser le générateur de nombres aléatoires</span></span><span>
</span><span><span class="hljs-title function_ invoke__">mt_srand</span></span><span>(</span><span><span class="hljs-variable">$seed</span></span><span>);
</span><span><span class="hljs-comment">// Générer des nombres aléatoires reproductibles</span></span><span>
</span><span><span class="hljs-variable">$random_number</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mt_rand</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le nombre aléatoire généré: <span class="hljs-subst">$random_number</span></span></span><span>\n";
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Traitement des valeurs de hachage : Dans l'exemple de code, nous utilisons l'algorithme de hachage SHA256 pour hacher les données d'entrée, puis convertir les 8 premiers caractères de la valeur de hachage en nombres décimaux. En effet, mt_srand nécessite une graine de type entier, et la valeur de hachage est généralement une très longue chaîne, nous pouvons donc simplement prendre les premiers caractères.
Répétabilité : chaque fois que la même entrée_data est transmise, la valeur de hachage est la même, donc la valeur de graines générée est également la même. De cette façon, les nombres aléatoires générés par MT_RAND seront les mêmes, réalisant un effet reproductible.
Encryption : en utilisant la fonction de hachage, bien que la répétition de nombres aléatoires puisse être assurée, le hachage lui-même fournit un certain degré d'imprévisibilité et de complexité. Par conséquent, la génération de nombres aléatoires après avoir combiné avec la fonction de hachage est non seulement répétée, mais a également un certain degré de "cryptage".
Convient pour la génération de données de test répétable : si vous avez besoin de générer les mêmes données aléatoires dans plusieurs exécutions (comme la simulation de données de test dans le même environnement), cette méthode peut garantir que les nombres aléatoires générés à chaque fois sont les mêmes.
Pas adapté au chiffrement réel : bien que l'utilisation des fonctions de hachage puisse augmenter la complexité de la génération de nombres aléatoires, il ne convient pas aux scénarios où un chiffrement sécurisé est vraiment requis. Pour une génération de nombres aléatoires avec des exigences de sécurité élevées, des méthodes de génération de nombres aléatoires cryptées plus fortes telles que Random_Bytes ou Random_int doivent être prises en compte.