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

Python与PHP中Base64+HMAC运算结果不一致的原因排查

为什么两段逻辑看似一致的Python与PHP代码返回结果不同?

核心问题出在字符串的转义处理差异上:

  • Python的单引号字符串中,\n会被自动解析为换行符(ASCII 0x0A),所以你的Python代码里,string_to_sign实际是包含多个换行的有效签名字符串。
  • PHP的单引号字符串中,\n不会被转义,会被当作两个独立的普通字符(反斜杠\ + 字母n),这就导致PHP代码里的$string_to_sign和Python版本的内容完全不一致,最终HMAC-SHA1计算出的签名自然不同。

修正后的PHP代码

把单引号改为双引号,让PHP解析\n为换行符:

$access_key = 'AKIAIOSFODNN7EXAMPLE';
$secret_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY';

// 改用双引号解析换行符
$string_to_sign = "GET\n\n\nTue, 27 Mar 2007 19:36:42 +0000\n/awsexamplebucket1/photos/puppy.jpg";

echo $access_key . ':' . base64_encode( hash_hmac('sha1', $string_to_sign, $secret_key, true) );

运行修正后的代码,就能得到和Python一致的签名结果:AKIAIOSFODNN7EXAMPLE:qgk2+6Sv9/oM7G3qLEjTH1a1l1g=

内容的提问来源于stack exchange,提问作者kombi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:22:21