Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie das Problem der verstümmelten 16-Bit-Zeichen der PHP MD5-Funktion

So lösen Sie das Problem der verstümmelten 16-Bit-Zeichen der PHP MD5-Funktion

藏色散人
藏色散人Original
2020-08-18 09:22:413970Durchsuche

Lösung für verstümmelte PHP-MD5-16-Bit-Zeichen: 1. Konvertieren Sie die ausgegebenen 16-Byte-Binärzeichen in Hexadezimalzahlen. 2. Erhalten Sie 16 MD5-Chiffretexte mit der Methode „substr(md5($str),8,16)“. .

So lösen Sie das Problem der verstümmelten 16-Bit-Zeichen der PHP MD5-Funktion

Empfohlen: „PHP-Video-Tutorial

verstümmelter Code

PHPs MD5-Funktion wird verwendet, um MD5-Operationen an String-Parametern auszuführen. Die Funktion hat zwei Parameter:

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

Der erste Parameter ist die Eingabezeichenfolge; der zweite Parameter ist standardmäßig FALSE. Wenn er auf TRUE gesetzt ist, kann ein 16-Bit-MD5-Wert ausgegeben werden.

Standardmäßig gibt md5(string $str) Folgendes zurück: einen 32-stelligen hexadezimalen Hashwert.
Wenn der zweite Parameter md5(string $str,TRUE) hinzugefügt wird, wird Folgendes zurückgegeben: ein Hashwert im rohen Binärformat mit einer Länge von 16 Bytes.

Daraus können wir erkennen, dass bei der Rückgabe eines Binärformats mit einer Länge von 16 Byte (entsprechend 16 Zeichen, da es ASCII-konform ist) verstümmelte Zeichen generiert werden, da der Browser es charakterisiert:

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

So lösen Sie das Problem der verstümmelten 16-Bit-Zeichen der PHP MD5-Funktion

Lösung

Wie erhält man also einen 16-Bit-MD5-Wert, der nicht verstümmelt ist? Es gibt zwei Methoden:

  1. Konvertieren Sie die ausgegebene 16-Byte-Binärdatei in eine Hexadezimalzahl.
  2. Im Chiffretext von MD5 sind der 8. bis 24. Teilstring des 16-Bit-Chiffretexts und der 32-Bit-Chiffretext gleich, sodass wir dies können Erhalten Sie den 16-stelligen MD5-Chiffretext, indem Sie Folgendes abfangen: substr(md5($str),8,16). Der zweite Parameter und der dritte Parameter stellen ab dem 8. Zeichen dar (der Index beginnt bei 0) und nehmen 16 Zeichen ein.

Hier verwenden wir die zweite Methode, um das Problem verstümmelter Zeichen zu lösen. Verwenden Sie immer noch das obige Beispiel:

$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>";

So lösen Sie das Problem der verstümmelten 16-Bit-Zeichen der PHP MD5-Funktion

Hinweis: Wenn Sie einen MD5-Wert in Großbuchstaben benötigen, verwenden Sie einfach direkt die Funktion strtoupper(...).

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem der verstümmelten 16-Bit-Zeichen der PHP MD5-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn