You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何相同输入下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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:52:49