All Products
Search
Document Center

Object Storage Service:Memeriksa konsistensi MD5 OSS

Last Updated:Mar 20, 2026

Nilai ETag dalam Object Storage Service (OSS) mengidentifikasi apakah konten suatu objek telah berubah — nilai tersebut tidak selalu sama dengan Hash MD5 objek tersebut. Jangan gunakan nilai ETag untuk memverifikasi integritas data.

Verifikasi integritas unggahan dengan Content-MD5

Untuk memastikan bahwa objek yang diunggah sesuai dengan file lokal Anda, sertakan header Content-MD5 dalam permintaan unggah. OSS menghitung Hash MD5 dari objek yang diterima dan membandingkannya dengan nilai Content-MD5 yang Anda berikan. Unggahan hanya berhasil jika kedua nilai tersebut cocok. Meskipun penyertaan header ini bersifat opsional, hal ini memungkinkan Anda memverifikasi integritas data sebagai bagian dari proses unggah.

Catatan

Header Content-MD5 harus disertakan dalam perhitungan signature. Jika nilai header tidak sesuai dengan signature, OSS akan mengembalikan error SignatureDoesNotMatch. Untuk detailnya, lihat Sertakan signature dalam header Authorization.

Hitung nilai Content-MD5

Nilai Content-MD5 adalah digest MD5 biner dari badan permintaan yang telah di-encode Base64 — bukan encoding Base64 dari string heksadesimal.

Contoh berikut menggunakan string 0123456789 untuk mengilustrasikan pendekatan yang benar dan salah.

Perhitungan yang benar

  1. Hitung Hash MD5 dari data untuk mendapatkan digest biner 128-bit.

  2. Lakukan encode Base64 terhadap digest biner tersebut.

>>> import base64, hashlib
>>> hash = hashlib.md5()
>>> hash.update("0123456789")   # Python 3: hash.update(b"0123456789")
>>> base64.b64encode(hash.digest())
'eB5eJF1ptWaXm4bijSPyxw=='

hash.digest() mengembalikan digest biner 128-bit:

>>> hash.digest()
'x\x1e^$]i\xb5f\x97\x9b\x86\xe2\x8d#\xf2\xc7'

Perhitungan yang salah

Kesalahan umum adalah melakukan encode Base64 terhadap string heksadesimal 32 karakter, bukan terhadap digest biner. Hal ini menghasilkan nilai Content-MD5 yang salah.

# hash.hexdigest() mengembalikan string heksadesimal 32 karakter — jangan gunakan ini untuk Content-MD5.
>>> hash.hexdigest()
'781e5e245d69b566979b86e28d23f2c7'
# Melakukan encode Base64 terhadap string heksa menghasilkan nilai yang salah:
>>> base64.b64encode(hash.hexdigest())
'NzgxZTVlMjQ1ZDY5YjU2Njk3OWI4NmUyOGQyM2YyYzc='