Maison >développement back-end >Problème PHP >Comment résoudre le problème des caractères 16 bits tronqués de la fonction PHP md5

Comment résoudre le problème des caractères 16 bits tronqués de la fonction PHP md5

藏色散人
藏色散人original
2020-08-18 09:22:414091parcourir

Solution pour les caractères 16 bits tronqués de php md5 : 1. Convertissez le binaire de sortie de 16 octets en hexadécimal ; 2. Passez la méthode "substr(md5($str),8,16)" pour obtenir le Texte chiffré md5 à 16 caractères.

Comment résoudre le problème des caractères 16 bits tronqués de la fonction PHP md5

Recommandé : "Tutoriel vidéo PHP"

code tronqué

La fonction md5 de PHP est utilisée pour effectuer des opérations md5 sur les paramètres de chaîne. Cette fonction a deux paramètres :

md5 ( string $str [, bool $raw_output = FALSE ] ) : string

Le premier paramètre est la chaîne d'entrée. ; le deuxième paramètre a la valeur par défaut FALSE Lorsqu'il est défini sur TRUE, une valeur md5 de 16 bits peut être générée.

Par défaut, md5(string $str) renvoie : une valeur de hachage hexadécimal de 32 caractères.
Si le deuxième paramètre md5(string $str,TRUE) est ajouté, il renvoie : une valeur de hachage au format binaire brut d'une longueur de 16 octets.

De là, nous pouvons voir que lorsqu'un format binaire d'une longueur de 16 octets (correspondant à 16 caractères, car conforme à l'ASCII) est renvoyé, puisque le navigateur le caractérise, des caractères tronqués seront produits :

$str = "PHP";
echo "字符串:".$str."<br>";
echo "TRUE - 原始 16 字符二进制格式:".md5($str,TRUE)."<br>";
echo "FALSE - 32 字符十六进制格式:".md5($str)."<br>";

Comment résoudre le problème des caractères 16 bits tronqués de la fonction PHP md5

Solution

Alors comment obtenir une valeur md5 16 bits qui n'est pas tronquée ? Il existe deux méthodes :

  1. convertir le texte chiffré de 16 octets en hexadécimal
  2. Dans le texte chiffré de md5, la différence entre le texte chiffré de 16 bits et le texte chiffré de 32 bits ; à la 24ème sous-chaîne sont les mêmes, nous pouvons donc obtenir le texte chiffré md5 à 16 caractères en interceptant : substr(md5($str),8,16). Le deuxième paramètre et le troisième paramètre représentent à partir du 8ème caractère (l'indice commence à 0), prenant 16 caractères.

Ici, nous utilisons la deuxième méthode pour résoudre le problème des caractères tronqués. Toujours en utilisant l'exemple ci-dessus :

$str = "PHP";
echo "字符串:".$str."<br>";
echo "TRUE - 原始 16 字符二进制格式(乱码):".md5($str,TRUE)."<br>";
echo "TRUE - 原始 16 字符二进制格式(不乱码):".substr(md5($str),8,16)."<br>";
echo "FALSE - 32 字符十六进制格式:".md5($str)."<br>";

Comment résoudre le problème des caractères 16 bits tronqués de la fonction PHP md5

Remarque : Si vous avez besoin d'une valeur md5 majuscule, utilisez simplement la fonction strtoupper(...) directement.

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