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

使用Boto3上传文件至S3 Bucket时SHA256校验失败求助

解决S3 PutObject时x-amz-checksum-sha256头无效的问题

你的校验和计算逻辑存在两处关键错误,导致生成的值不符合S3的格式要求:

  • 错误使用hexdigest()而非digest():hexdigest()返回的是哈希值的十六进制字符串表示,而S3要求的是原始二进制哈希值的base64编码。你把十六进制字符串转成bytes再做base64编码,相当于对字符串的字节编码做二次转换,完全偏离了正确的哈希值。
  • 错误用str()包裹base64结果:b64encode()返回的是bytes对象,直接转成str会保留b'...'的字节标识格式,这会被S3判定为无效的校验和值。

修正后的校验和计算函数

import hashlib
from base64 import b64encode

def checksum_sha256(filename):
    """ Calculates SHA256 Checksum for specified filename """
    sha256_hash = hashlib.sha256()
    with open(filename, "rb") as f:
        for byte_block in iter(lambda: f.read(8192), b""):
            sha256_hash.update(byte_block)
    # 直接获取原始二进制哈希值,base64编码后转为纯字符串
    return b64encode(sha256_hash.digest()).decode("utf-8")

验证方法

你可以用本地命令计算正确的校验和来对比:

# 用openssl计算文件的SHA256 base64校验和
openssl dgst -sha256 -binary 你的文件名 | base64

该结果应与修正后函数的返回值完全一致,此时再执行原上传代码即可正常通过S3的校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:20:12