调用putobject操作时发生错误(invalidargument):键的计算md5哈希与提供的哈希不匹配

pdtvr36n  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(243)

如何在python flask中为文件对象创建md5哈希?我已尝试使用以下代码创建:

md5_hash = hashlib.md5()
md5_hash.update(file)
digest = md5_hash.hexdigest()
base64_encoded_md5 = base64.b64encode(digest.encode("utf-8"))
base64_encoded_md5_string = str(base64_encoded_md5.decode("utf-8"))

我在boto3 s3_client.upload_fileobj()函数中使用了sse-c加密,因此还将ssecustomeralgorithm、ssecustomerkey和ssecustomerkeymd5传递到外部参数中。
这里,ssecustomerkeymd5高于base64_编码的_md5_字符串值。
在我的实现中是否有任何错误来获取md5哈希?
amazon如何为同一个文件对象创建md5哈希?
boto3依赖项中是否有任何内置函数,我可以使用这些函数获取md5哈希值?
我调试了整个问题,boto3.s3.inject包含upload_fileobj()函数。它正在上传文件并作为响应,在图像中返回下面的响应。boto3.s3.inject响应
我已经为这个问题绞尽脑汁好几天了。请帮忙。
[已解决]:修改我的加密密钥生成算法以生成32位字符串。早些时候是16位导致了问题。还从upload_fileobj()中的extraargs中删除了ssecustomerkeymd5,因为boto3在内部计算加密密钥本身的md5哈希,并在botocore.client中发出实际请求之前将其添加到请求头中。_make_api_调用。
简言之
已从外部参数中删除ssecustomerkeymd5
修改customerkey/encryptionkey生成算法以生成32位字符串。
按照shimo的回答,用python为boto3文件加密创建ssecustomerkey的正确方法是什么?这就是答案。

wztqucjr

wztqucjr1#

您可以在boto3文档中找到这一解释,尽管它不在上传部分。
ssecustomerkeymd5(字符串)——根据RFC1321指定加密密钥的128位md5摘要。
您的代码似乎在计算文件的md5,而不是加密密钥。

相关问题