Position actuelle: Accueil> Derniers articles> Comment coopérer pour déterminer si les deux valeurs de hachage sont cohérentes?

Comment coopérer pour déterminer si les deux valeurs de hachage sont cohérentes?

M66 2025-07-28

Dans PHP, les fonctions de hachage sont largement utilisées dans des scénarios tels que la vérification du mot de passe et la vérification de l'intégrité des données. Pour garantir la sécurité des données, nous devons souvent déterminer si les deux valeurs de hachage sont cohérentes. PHP fournit plusieurs fonctions pour générer et comparer les valeurs de hachage. HASH_COPY et HASH_Equals sont deux fonctions couramment utilisées qui peuvent nous aider efficacement à terminer le travail de comparaison de la valeur de hachage.

Que sont Hash_Copy et Hash_Equals?

  1. hash_copy
    La fonction HASH_COPY n'existe pas réellement dans PHP. Des déclarations similaires peuvent être observées dans certains documents ou articles, qui sont susceptibles d'être mal utilisés ou de malentendus. Les fonctions communes pour la comparaison et la copie de hachage dans PHP sont Hash () et Hash_Equals () .

  2. hash_equals
    Hash_Equals est une fonction fournie par PHP pour comparer en toute sécurité deux valeurs de hachage. Sa fonction est d'éviter les attaques de différence de temps. Grâce à des comparaisons de cordes conventionnelles, un attaquant peut déduire la différence de valeurs de hachage en comparant la différence de temps de l'opération de comparaison. HASH_EQUALS effectuera des comparaisons caractéristiques par caractère lorsque les longueurs des deux valeurs de hachage sont les mêmes pour garantir que ces différences de temps ne sont pas exposées.

     <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">hash_equals</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$known_string</span></span><span> , </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$user_string</span></span><span> )
    </span></span>
    • $ connu_string : une valeur de hachage connue ou une chaîne.

    • $ user_string : la valeur de hachage ou la chaîne entrée par l'utilisateur.

    • Valeur de retour: renvoie true si les deux chaînes sont exactement les mêmes, sinon renvoyez false .

Comment utiliser Hash_Equals pour déterminer si les deux valeurs de hachage sont cohérentes?

Lorsque nous voulons comparer si les deux valeurs de hachage sont cohérentes, nous pouvons utiliser la fonction HASH_EQUALS pour garantir un jugement sûr et précis. Voici un exemple courant, supposons que nous devons vérifier que le mot de passe entré par l'utilisateur est cohérent avec la valeur de hachage stockée dans la base de données.

Exemple: Vérifiez le mot de passe entré par l'utilisateur

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Supposons que la valeur de hachage stockée dans la base de données</span></span><span>
</span><span><span class="hljs-variable">$stored_hash</span></span><span> = </span><span><span class="hljs-string">'$2y$10$V5ldlhO.Jk19pZpWzchL7vJdknz57Vry8V15hATFmgt0gt04SKeQK'</span></span><span>; </span><span><span class="hljs-comment">// Mot de passe haché</span></span><span>

</span><span><span class="hljs-comment">// Mot de passe entré par l&#39;utilisateur</span></span><span>
</span><span><span class="hljs-variable">$user_input_password</span></span><span> = </span><span><span class="hljs-string">'user_password'</span></span><span>;

</span><span><span class="hljs-comment">// utiliser password_hash Générer du hachage et vérifier</span></span><span>
</span><span><span class="hljs-variable">$input_hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">password_hash</span></span><span>(</span><span><span class="hljs-variable">$user_input_password</span></span><span>, PASSWORD_DEFAULT);

</span><span><span class="hljs-comment">// utiliser hash_equals Comparaison de deux valeurs de hachage</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">hash_equals</span></span><span>(</span><span><span class="hljs-variable">$stored_hash</span></span><span>, </span><span><span class="hljs-variable">$input_hash</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Mot de passe cohérent!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Les mots de passe sont incohérents!"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Dans cet exemple, bien que Password_hash ait hachée le mot de passe de l'utilisateur, le rôle de Hash_equals est de s'assurer qu'il n'y a pas de risques de sécurité potentiels en raison de différentes longueurs ou de différences de retard pendant la comparaison.

Pourquoi utiliser hash_equals?

Les opérations de comparaison de chaînes dans PHP (telles que == ou strcmp () ) ont certains risques de sécurité car leur temps d'exécution dépendra de la longueur et du contenu de la chaîne. Pour les données sensibles telles que la valeur de hachage, si vous utilisez == pour comparer directement, l'attaquant peut déduire la différence entre la valeur de hachage en analysant le temps d'exécution de la comparaison des chaînes. Cette méthode d'attaque est appelée une attaque de décalage horaire .

Hash_equals est conçu pour éviter de telles attaques. Il oblige les longueurs de deux chaînes à être cohérentes et à comparer par octets octets, éliminant les risques de sécurité causés par les différences de temps.

Utiliser des scénarios

  1. Authentification utilisateur <br> Lorsque l'utilisateur se connecte, nous hachons généralement le mot de passe entré par l'utilisateur, puis le comparons avec la valeur de hachage stockée dans la base de données. Pour s'assurer que le processus de vérification est sûr, Hash_Equals doit être utilisé.

  2. Vérification de l'intégrité des données <br> Lors de la transmission de données, nous pouvons calculer la valeur de hachage des données et les transmettre au récepteur. Le récepteur peut utiliser Hash_Equals pour comparer la valeur de hachage reçue avec la valeur de hachage calculée localement pour déterminer si les données ont été falsifiées.

  3. Générer et comparer les hachages de fichiers <br> En hachant le contenu du fichier, vous pouvez déterminer si le fichier a changé. Hash_Equals garantit que lorsque les valeurs de hachage de fichiers sont comparées, il évite les attaques externes.

en conclusion

Hash_Equals est une fonction de comparaison de hachage très sûre et efficace dans PHP, ce qui peut prévenir efficacement les attaques de décalage horaire. Bien que Hash_Copy ne soit pas une fonction PHP intégrée, nous pouvons traiter et comparer en toute sécurité les valeurs de hachage via des fonctions telles que Hash () et Hash_Equals . Lorsqu'il est nécessaire de vérifier les données sensibles, nous devons toujours utiliser HASH_Equals pour assurer la sécurité du processus de comparaison et éviter les risques de sécurité potentiels.