Maison > Article > développement back-end > Comment résoudre le problème des caractères 16 bits tronqués de la fonction PHP md5
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.
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ètremd5(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>";
Solution
Alors comment obtenir une valeur md5 16 bits qui n'est pas tronquée ? Il existe deux méthodes :
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>";
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!