php md5 16位字符乱码的解决办法:1、对输出的16字节的二进制转化为十六进制;2、通过“substr(md5($str),8,16)”方法来获得16个字符的md5密文。
推荐:《PHP视频教程》
乱码
PHP的md5函数用于对字符串参数进行md5运算,该函数有两个参数:
md5 ( 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>";
解决
那么如何得到不乱码的16位md5值呢?有两种方法:
- 对输出的16字节的二进制转化为十六进制;
- md5的密文中,16位密文与32位密文的第8-24位子字符串是一样的,所以我们就可以通过截取的方式:
substr(md5($str),8,16)
来获得16个字符的md5密文了。其中第二个参数和第三个参数代表从第8个字符开始(下标从0开始),取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>";
备注:而如果需要大写的md5值,直接使用strtoupper(…)函数即可。
以上是如何解决PHP md5函数的16位字符乱码问题的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。