为何相同输入下base64_encode函数输出存在差异?
问题原因解析
你遇到的核心问题是:看起来相同的两个输入,本质上字节内容完全不一样,所以base64_encode的输出自然不同,具体原因如下:
openssl_encrypt返回的是原始二进制字节流,不是可打印的字符串。你看到的�P��@��-�k� ��是终端/编辑器对二进制字节的错误解析结果——这些二进制字节不符合当前字符编码(比如UTF-8)的规则,所以被替换成了乱码符号(�),显示出来的字符和原始二进制字节没有正确对应关系。- 当你把这些乱码用双引号包裹作为
base64_encode的参数时,PHP会将这些显示用的字符按照脚本默认编码(通常是UTF-8)转换成字节。比如乱码里的�对应UTF-8字节0xEF 0xBF 0xBD,而$encrypt里的原始二进制字节是完全不同的值,两者的输入字节序列天差地别。
你可以用bin2hex工具验证两者的差异:
// 打印$encrypt的原始二进制十六进制 echo bin2hex($encrypt); // 打印手动输入的乱码字符串的十六进制 echo bin2hex("�P��@��-�k� ��");
运行后会发现两个输出完全不同,这直接证明了输入的字节内容不一致,最终导致base64编码结果不同。
内容的提问来源于stack exchange,提问作者Amit Kaushal
相关产品推荐
相关产品推荐

