php加密16位md5乱码的问题

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 = "https://liyangweb.com";
echo md5($str);
echo md5_16($str);

2 comments:

评论已关闭。