>백엔드 개발 >PHP 문제 >PHP md5 함수의 16비트 문자 왜곡 문제를 해결하는 방법

PHP md5 함수의 16비트 문자 왜곡 문제를 해결하는 방법

藏色散人
藏色散人원래의
2020-08-18 09:22:414092검색

php md5 16비트 문자 왜곡 문자에 대한 해결 방법: 1. 출력 16바이트 바이너리를 16진수로 변환합니다. 2. "substr(md5($str),8,16)" 방법을 통해 문자의 md5 암호문을 구합니다. .

PHP md5 함수의 16비트 문자 왜곡 문제를 해결하는 방법

권장: "PHP 비디오 튜토리얼"

garbled code

PHP의 md5 함수는 문자열 매개변수에 대해 md5 작업을 수행하는 데 사용됩니다. 이 함수에는 두 개의 매개변수가 있습니다:

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

第一个参数是输入字符串;第二个参数默认为FALSE,设置为TRUE时可以输出16位的md5值。

默认情况下,md5(string $str) 会返回:32 字符、十六进制数字形式的散列值。
如果加上第二个参数 md5(string $str,TRUE) 则返回:16字节长度的原始二进制格式的散列值。

由此我们看出,当返回16字节长度(对应16个字符,因为符合ASCII)的二进制格式时,由于浏览器对其进行了字符化处理,由此就会产生乱码:

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

PHP md5 함수의 16비트 문자 왜곡 문제를 해결하는 방법

解决

那么如何得到不乱码的16位md5值呢?有两种方法:

  1. 对输出的16字节的二进制转化为十六进制;
  2. md5的密文中,16位密文与32位密文的第8-24位子字符串是一样的,所以我们就可以通过截取的方式:substr(md5($str),8,16)
첫 번째 매개변수는 입력 문자열이고, 두 번째 매개변수는 기본적으로 FALSE이며, TRUE로 설정하면 16비트 md5를 출력할 수 있습니다. 값.

기본적으로 md5(string $str)는 32자의 16진수 해시 값을 반환합니다.
두 번째 매개변수 md5(string $str,TRUE)가 추가되면 길이가 16바이트인 원시 바이너리 형식의 해시 값이 반환됩니다. PHP md5 함수의 16비트 문자 왜곡 문제를 해결하는 방법

이로부터 우리는 16바이트 길이(ASCII를 따르기 때문에 16자에 해당)의 바이너리 형식이 반환될 때 브라우저가 이를 특성화하기 때문에 잘못된 문자가 생성된다는 것을 알 수 있습니다:

$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>";
PHP md5 함수의 16비트 문자 왜곡 문제를 해결하는 방법

🎜 🎜해결책🎜 🎜 🎜그래서 얻는 방법 왜곡되지 않은 16비트 md5 값은 무엇입니까? 두 가지 방법이 있습니다: 🎜
  1. 출력된 16바이트 바이너리를 16진수로 변환합니다. 🎜
  2. md5의 암호문에서 16비트 암호문과 32비트 암호문의 하위 문자열 동일하므로 substr(md5($str),8,16)을 가로채서 16자 md5 암호문을 얻을 수 있습니다. 두 번째 매개변수와 세 번째 매개변수는 8번째 문자(아래 첨자는 0부터 시작)부터 시작하여 16자를 나타냅니다. 🎜🎜🎜여기서는 문자 깨짐 문제를 해결하기 위해 두 번째 방법을 사용합니다. 여전히 위의 예를 사용합니다. 🎜rrreee🎜🎜🎜🎜🎜참고: 대문자 md5 값이 필요한 경우 strtoupper(...) 함수를 직접 사용하세요. 🎜🎜

위 내용은 PHP md5 함수의 16비트 문자 왜곡 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.