全部产品
Search
文档中心

Object Storage Service:Apakah saya bisa menggunakan nilai ETag sebagai hash MD5 OSS untuk memeriksa konsistensi data?

更新时间:Jun 26, 2025

Objek dalam Object Storage Service (OSS) memiliki nilai ETag yang digunakan untuk mengidentifikasi perubahan pada data di server. Namun, nilai ETag ini tidak selalu sama dengan hash MD5 dari objek tersebut. Kami menyarankan agar Anda tidak menggunakan nilai ETag untuk memverifikasi konsistensi data.

Untuk memastikan bahwa objek yang diunggah ke OSS konsisten dengan file lokal, Anda dapat menyertakan nilai header Content-MD5 dalam permintaan unggah. Saat OSS menerima objek, sistem akan membandingkan hash MD5 dengan nilai header Content-MD5. Objek hanya dapat diunggah jika hash MD5 sesuai dengan nilai header Content-MD5. Dengan cara ini, konsistensi data dipastikan.

Contoh berikut menggunakan string "123456789" untuk menunjukkan cara menghitung nilai Content-MD5 dari konten permintaan.

  • Perhitungan yang Benar

    1. Hitung hash MD5 dari string, yang merupakan larik biner 128-bit.

    2. Enkode larik biner (bukan string 32-bit) dalam Base64.

    Kode Python berikut memberikan contoh cara menghitung nilai Content-MD5:

    >>> import base64,hashlib
    >>> hash = hashlib.md5()
    >>> hash.update("0123456789")   // Jika Anda menggunakan Python 3, ubah baris ini menjadi hash.update(b"0123456789"). 
    >>> base64.b64encode(hash.digest())
    'eB5e********************'

    Gunakan hash.digest() untuk menghitung larik biner 128-bit.

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

    Catatan

    Kesalahan umum adalah meng-enkode string 32-bit yang dihitung dalam Base64 untuk mendapatkan nilai Content-MD5.

    # Panggil hash.hexdigest() untuk mendapatkan string teks 32-bit. 
    >>> hash.hexdigest()
    '781e5e245d69b566979b86e28d23f2c7'
    # Contoh kode berikut memberikan contoh hasil pengkodean hash MD5 yang salah dalam Base64: 
    >>> base64.b64encode(hash.hexdigest())
    'NzgxZTVlMjQ1ZDY5YjU2Njk3OWI4NmUyOGQyM2YyYzc='
Catatan Parameter dalam beberapa header, seperti Content-MD5, harus ditambahkan ke perhitungan tanda tangan. Parameter untuk header harus konsisten dengan parameter untuk tanda tangan. Jika tidak, pesan kesalahan SignatureDoesNotMatch akan dikembalikan. Untuk informasi lebih lanjut tentang header yang membawa informasi tanda tangan, lihat Sertakan tanda tangan V1 di header Authorization.