似乎 mcrypt_decrypt 用空字符 ('\0') 填充*返回值字符串*,以填充到 n * 块大小。对于像我这样的老 C 程序员来说,很容易认为字符串在第一个空字符处结束。在 PHP 中,它不是这样的
strlen("abc\0\0") 返回 5,而不是 3
strcmp("abc", "abc\0\0") 返回 -2,而不是 0
当将从 mycrypt_decrypt 返回的字符串传递给 NuSoap 消息时,我痛苦地吸取了这个教训,该消息很乐意将空字符传递给接收方,接收方无法弄清楚我在说什么。
我的解决方案是
<?php
$retval = mcrypt_decrypt( ...etc ...);
$retval = rtrim($retval, "\0"); // 仅修剪末尾的空字符
?>