全部产品
Search
文档中心

Object Storage Service:Periksa integritas data menggunakan CRC-64

更新时间:Nov 09, 2025

Kesalahan dapat terjadi selama transfer data antara klien dan server. Object Storage Service (OSS) mengembalikan nilai pemeriksaan redundansi siklik 64-bit (CRC-64) untuk objek yang diunggah. Anda dapat membandingkan nilai yang dikembalikan dengan nilai CRC-64 yang dihitung secara lokal untuk memverifikasi integritas data.

Informasi latar belakang

OSS menghitung nilai CRC-64 untuk objek yang baru diunggah dan menyimpan hasilnya sebagai metadata objek. Header respons mencakup x-oss-hash-crc64ecma, yang menentukan nilai CRC-64. CRC 64-bit ini dihitung berdasarkan algoritma CRC-64/XZ.

OSS tidak menghitung nilai CRC-64 untuk objek yang diunggah sebelum fitur ini tersedia. Akibatnya, tidak ada nilai CRC-64 yang dikembalikan saat Anda mengambil objek tersebut.

Catatan penggunaan

  • Operasi PutObject, AppendObject, PostObject, dan MultipartUploadPart mengembalikan nilai CRC-64. Setelah pengunggahan selesai, Anda dapat mengambil nilai CRC-64 dari server dan membandingkannya dengan nilai yang dihitung secara lokal.

  • Saat memanggil operasi CompleteMultipartUpload, nilai CRC-64 untuk objek lengkap hanya dikembalikan jika semua bagiannya memiliki nilai CRC-64. Jika ada bagian yang tidak memiliki nilai CRC-64, nilai CRC-64 untuk objek lengkap tidak dikembalikan. Sebagai contoh, jika suatu bagian diunggah sebelum fitur ini tersedia, maka bagian tersebut tidak akan memiliki nilai CRC-64.

  • Operasi GetObject, HeadObject, dan GetObjectMeta mengembalikan nilai CRC-64 objek, jika tersedia. Setelah operasi GetObject selesai, Anda dapat mengambil nilai CRC-64 dari server dan membandingkannya dengan nilai yang dihitung secara lokal.

    Catatan

    Permintaan GET dengan header Range mengembalikan nilai CRC-64 dari seluruh objek.

  • Untuk operasi salin, seperti CopyObject dan UploadPartCopy, objek atau bagian baru tidak dijamin memiliki nilai CRC-64.

Contoh

Berikut adalah kode Python yang memberikan contoh cara memverifikasi integritas data menggunakan nilai CRC-64.

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import crcmod
import random
import string
from oss2.models import PartInfo

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Tentukan titik akhir untuk wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
# Tentukan nama bucket di yourBucketName.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')
# Buat fungsi pemeriksaan CRC-64.
do_crc64 = crcmod.mkCrcFun(0x142F0E1EBA9EA3693, initCrc=0, xorOut=0xffffffffffffffff, rev=True)

# Periksa CRC-64 dan cetak hasilnya.
def check_crc64(local_crc64, oss_crc64, msg="periksa crc64"):
    if local_crc64 != oss_crc64:
        print("{0} periksa crc64 gagal. lokal:{1}, oss:{2}.".format(msg, local_crc64, oss_crc64))
        return False
    else:
        print("{0} periksa crc64 berhasil.".format(msg))
        return True

# Hasilkan string acak dengan panjang tertentu.
def random_string(length):
    return ''.join(random.choice(string.ascii_lowercase) for i in range(length))

# Hasilkan string acak bernama konten dengan panjang 1024.
content = random_string(1024)

# Atur jalur objek.
key = 'normal-key'

# Verifikasi PutObject.
result = bucket.put_object(key, content)
oss_crc64 = result.headers.get('x-oss-hash-crc64ecma', '')
local_crc64 = str(do_crc64(oss2.to_bytes(content)))
check_crc64(local_crc64, oss_crc64, "unggah objek")

# Verifikasi GetObject.
result = bucket.get_object(key)
oss_crc64 = result.headers.get('x-oss-hash-crc64ecma', '')
local_crc64 = str(do_crc64(result.resp.read()))
check_crc64(local_crc64, oss_crc64, "dapatkan objek")

# Verifikasi UploadPart dan Lengkapi.
part_info_list = []
key = "multipart-key"
result = bucket.init_multipart_upload(key)
upload_id = result.upload_id
part_1 = random_string(1024 * 1024)
result = bucket.upload_part(key, upload_id, 1, part_1)
oss_crc64 = result.headers.get('x-oss-hash-crc64ecma', '')
local_crc64 = str(do_crc64(oss2.to_bytes(part_1)))
# Periksa integritas data bagian 1 yang diunggah.
check_crc64(local_crc64, oss_crc64, "unggah bagian objek 1")
part_info_list.append(PartInfo(1, result.etag, len(part_1)))
part_2 = random_string(1024 * 1024)
result = bucket.upload_part(key, upload_id, 2, part_2)
oss_crc64 = result.headers.get('x-oss-hash-crc64ecma', '')
local_crc64 = str(do_crc64(oss2.to_bytes(part_2)))
# Periksa integritas data bagian 2 yang diunggah.
check_crc64(local_crc64, oss_crc64, "unggah bagian objek 2")
part_info_list.append(PartInfo(2, result.etag, len(part_2)))
result = bucket.complete_multipart_upload(key, upload_id, part_info_list)
oss_crc64 = result.headers.get('x-oss-hash-crc64ecma', '')
local_crc64 = str(do_crc64(oss2.to_bytes(part_2), do_crc64(oss2.to_bytes(part_1))))
# Periksa apakah objek akhir di OSS konsisten dengan file lokal.
check_crc64(local_crc64, oss_crc64, "lengkapi objek")

Dukungan SDK OSS

Beberapa SDK OSS mendukung pemeriksaan integritas data CRC-64 untuk unggah dan unduhan. Lihat tabel berikut untuk contohnya.

SDK

Dukungan CRC

Contoh

Java SDK

Ya

CRCSample.java

Python SDK

Ya

object_check.py

PHP SDK

Tidak

Tidak ada

C# SDK

Tidak

Tidak ada

C SDK

Ya

oss_crc_sample.c

JavaScript SDK

Tidak

Tidak ada

Go SDK

Ya

crc_test.go

Ruby SDK

Tidak

Tidak ada

iOS SDK

Ya

OSSCrc64Tests.m

Android SDK

Ya

CRC64Test.java