php加密16位md5乱码的问题

2015-11-25 liyangweb.com 李杨 PHP

php默认的md5加密是32位的,大概看了一下文档,如果给第二个参数赋值true,就会产生16位的md5,但是实际并不是这样,当我们在把第二个参数设置为true的时候,结果变成了乱码,再仔细看发现大意了,文档上面说的是“如果可选的 raw_output 被设置为 TRUE,那么 MD5 报文摘要将以16字节长度的原始二进制格式返回”,并不是我理解的16位md5。

查阅了一些资料,发现其实32位的加密字符串的第8到24位,和16位MD5的字符串是一样的。

所以我们可以先生成32位md5,然后再进行截取。


function md5_16($str){
     return substr(md5($str),8,16);
}
$str = "http://www.liyangweb.com";
echo md5($str);
echo md5_16($str);


标签: PHP

评论:

ibear
2016-02-04 02:09
呃。第二个参数为 TRUE 时候 是以16进制显示,不是MD5的16位。。。
liyangweb.com 李杨
2016-02-19 14:28
@ibear:多谢提醒,已更正~~~

发表评论:

Powered by emlog 冀ICP备13011830号-1