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

使用POST请求向S3上传对象时,如何解决SSE-C密钥哈希不匹配问题?

解决SSE-C预签名POST URL上传的MD5哈希不匹配问题

核心问题分析

你遇到的哈希不匹配错误,大概率是因为错误计算了SSE-C要求的密钥MD5值的Base64编码。AWS SSE-C要求的是原始密钥的MD5二进制哈希值的Base64编码,而不是MD5十六进制字符串的Base64编码——你当前使用的MjJiNzVkNjAwN2UwNmY0YTk1OWQxYjFkNjliNGM0YmQ=是把MD5的十六进制字符串(22b75d6007e06f4a959d1b1d69b4c4bd)转成了Base64,这不符合AWS的校验规则。

正确计算SSE-C所需的MD5 Base64值

用命令行工具直接计算原始密钥的MD5二进制哈希并转Base64,结果才是正确的:

# 计算密钥TEST123的MD5二进制哈希,再转Base64
echo -n "TEST123" | openssl md5 -binary | base64

执行后得到的正确值是:K7gNU3sdo+OL0wNhqoVWhr3g6s4=

上传请求的正确参数配置

上传时必须在请求头中包含以下三个SSE-C相关字段,且值必须与预签名URL生成时的参数一致:

  • x-amz-server-side-encryption-customer-algorithm: AES256
  • x-amz-server-side-encryption-customer-key: VEVTVDEyMw==(你的原始密钥Base64编码,这个是正确的)
  • x-amz-server-side-encryption-customer-key-MD5: K7gNU3sdo+OL0wNhqoVWhr3g6s4=(上面计算出的正确值)

预签名POST URL生成的关键检查

确保生成预签名POST表单时,已经将SSE-C相关参数包含在签名范围内:

  • 表单字段中必须包含x-amz-server-side-encryption-customer-algorithm=AES256
  • 生成签名时,必须将该字段以及后续上传要用到的SSE-C请求头纳入签名计算逻辑
  • 预签名的有效期、桶名、对象键等其他参数无错误

验证步骤

  1. 用上述命令行工具重新计算MD5的Base64值,替换你当前使用的错误值
  2. 检查上传请求的三个SSE-C头是否完全符合要求
  3. 确认预签名POST生成时,已正确包含SSE-C的算法参数并完成签名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:05:15