2015-09-09 1 views
0

Я пытаюсь проверить с S3 Put Object, используя локальный хэш осущ следующим образом:AWS PutObjectResponse.ETag Несовпадение

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, который основан на теле содержимого (не Meta) моего запроса. В этом случае я купил документ JSON, который является источником моего хэша.

Все в порядке, за исключением случаев, когда я использую AWS Managed KMS на стороне сервера, с которой мои хэши не совпадают. Невозможно ли проверить тело контента на отправленное сообщение, поскольку он выглядит, что хеш-файл ETAG основан на зашифрованном контенте контента, а не на исходном содержимом PUT.

ответ

0

Невозможно проверить целостность содержимого/тела с помощью ETag, поскольку, как задокументировано, ETag больше не соответствует ожидаемому значению при использовании SSE с ключами KMS.

Однако вы можете предотвратить S3 от , принимая неполную или поврежденную загрузку, отправив Content-MD5 заголовок с загрузкой. Значение, которое вы укажете, будет бинарным (не шестнадцатеричным) md5 полезной нагрузки, закодированным в base64, а не спрятанным с помощью URL-адреса. Если полезная нагрузка не соответствует этому хешу, S3 не примет загрузку или сохранение объекта и вернет ошибку.

SDK, который вы используете, может сделать это за вас автоматически, или вы можете включить его; Я не знаю, так как я использую свои собственные библиотеки с нуля для всех взаимодействий службы AWS.