Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS PutObjectResponse.ETag不匹配_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services AWS PutObjectResponse.ETag不匹配

Amazon web services AWS PutObjectResponse.ETag不匹配,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我正在尝试使用本地哈希impl验证S3 Put对象,如下所示: MD5 md5 = MD5.Create(); byte[] inputBytes = Encoding.ASCII.GetBytes(str); byte[] hash = md5.ComputeHash(inputBytes); StringBuilder sb = new StringBuilder(); foreach (byte byt in hash) { sb.Append(byt.ToString("X2

我正在尝试使用本地哈希impl验证S3 Put对象,如下所示:

MD5 md5 = MD5.Create();
byte[] inputBytes = Encoding.ASCII.GetBytes(str);
byte[] hash = md5.ComputeHash(inputBytes);

StringBuilder sb = new StringBuilder();

foreach (byte byt in hash)
{
    sb.Append(byt.ToString("X2"));
}

return sb.ToString().ToLower();
根据AWS文档,这应该与PutObjectResponse.ETag属性相匹配,该属性基于我的put请求的内容体而非元数据。在这种情况下,我会发布一个JSON文档,它是我散列的源


除了使用AWS管理的KMS服务器端加密时,我的哈希值不匹配之外,一切都很好。无法将内容正文验证为发布的内容正文,因为ETAG哈希似乎基于加密的内容正文,而不是原始的PUT内容。

无法使用ETAG验证内容/正文的完整性,因为如文件所述,将SSE与KMS键一起使用时,ETag不再与预期值匹配

但是,您可以通过在上传时发送Content-MD5头来防止S3接受不完整或损坏的上传。您提供的值将是有效负载的二进制而非十六进制md5,以base64编码,而不是url转义。如果有效负载与此哈希不匹配,S3将不接受上载或存储对象,并将返回一个错误

您正在使用的SDK可能会自动为您执行此操作,或者您可以启用它;我不知道,因为我对所有AWS服务交互都使用自己编写的从头开始的库