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

curl加密上传文件至云存储返回400密钥错误问题排查

问题定位

携带加密头返回400错误的核心原因是x-goog-encryption-key-sha256请求头取值不符合云存储服务客户侧加密的参数格式规范,鉴权、接口路径、密钥本身、上传逻辑均无异常(无加密头可正常上传可佐证这一点)。
云存储客户侧加密三个请求头的校验规则如下:

  • x-goog-encryption-algorithm:固定传AES256,你的配置符合要求
  • x-goog-encryption-key:需传入32位原始AES256密钥的base64编码值,你通过random_bytes(32)生成密钥再base64编码的逻辑正确,传入的密钥长度、格式均符合要求
  • x-goog-encryption-key-sha256:需传入原始二进制格式的密钥SHA256哈希值的base64编码,你当前传入的是哈希值的十六进制字符串,完全不符合格式要求,直接触发参数校验失败,返回密钥不合法的报错。

你的PHP密钥生成代码存在明确逻辑错误:PHP内置hash()函数默认第三个参数为false,返回结果是哈希值的十六进制小写字符串(长度64字符),和接口要求的「原始二进制哈希base64编码」(长度约44字符,末尾带=补位)格式完全不匹配。

修复方案

仅需修改PHP代码中哈希值的生成逻辑,给hash()函数传入第三个参数true获取原始二进制哈希结果,再对该结果做base64编码即可:

$key = random_bytes(32);
$encodedKey = base64_encode($key);
// 第三个参数设为true返回原始二进制哈希,再进行base64编码
$hash = base64_encode(hash('SHA256', $key, true));
验证说明

使用修正后生成的$encodedKey和$hash值替换curl请求中对应的两个加密头,即可正常完成加密文件上传。你当前请求中传入的ca2f7dac23426d0ba16911be8911f9b71b1fa7f9ecc53ac87100932677d92319是典型的十六进制哈希串,长度64位,和接口要求的44位左右base64编码值特征明显不符,替换为正确生成的值即可解决问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:36:09