在php中,使用mcrypt_encrypt加密后,再用mcrypt_decrypt解密,末尾可能会出现乱码。找了n多资料后,终于找到了解决办法。
其实官方文档就有介绍:http://php.net/manual/zh/function.mcrypt-encrypt.php
加密的时候,对于长度不足的密钥和初始向量会在其后补齐 '\0' 使其达到有效长度。所以解密后要将 '\0' 替换回去,如下:
$val = mcrypt_decrypt( ...etc...);
$val = rtrim($val , "\0");
要注意的是:\0要用双引号引起来,用单引号无效,它不会转义。