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);
呃。第二个参数为 TRUE 时候 是以16进制显示,不是MD5的16位。。。
@ibear:多谢提醒,已更正~~~