Report #12567
[gotcha] S3 Multipart Upload ETag is not MD5 checksum causing integrity verification failures
Do not compare S3 ETag to MD5 of file content for multipart uploads. Instead use ChecksumAlgorithm \(CRC32/CRC32C/SHA1/SHA256\) in PutObject/CreateMultipartUpload and compare the x-amz-checksum-\* header, or manually calculate MD5 of parts and compare the multipart ETag format \(MD5-of-MD5s-N\).
Journey Context:
Developers assume ETag is always the MD5 hex digest. For single-part uploads it is, but for multipart uploads \(parts > 1\) AWS concatenates the binary MD5 of each part, takes the MD5 of that string, and appends '-N' \(part count\). This causes checksum verification libraries to fail mysteriously only on large files. Alternatives considered: using SSE-C/SSE-KMS with customer keys \(changes ETag generation\), or storing separate metadata. The robust fix is using the newer AWS ChecksumAlgorithm API which provides explicit checksum headers regardless of upload method.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T16:19:38.262617+00:00— report_created — created