Object Storage Service (OSS) SDK untuk iOS menyediakan pemeriksaan integritas data guna memastikan keamanan data selama proses pengunggahan dan pengunduhan.
Pemeriksaan integritas data dalam pengunggahan
Karena kompleksitas jaringan seluler, kesalahan dapat terjadi saat data ditransfer antara klien dan server. OSS menyediakan pemeriksaan integritas data ujung ke ujung berdasarkan algoritma MD5 dan CRC-64.
Verifikasi MD5
Jika Anda menentukan header Content-MD5 dalam permintaan saat mengunggah objek, OSS akan melakukan verifikasi MD5 pada objek tersebut untuk memastikan integritas datanya. Objek hanya akan diunggah jika hash MD5 dari objek yang diterima sesuai dengan nilai Content-MD5 yang ditentukan dalam permintaan.
OSSPutObjectRequest * put = [OSSPutObjectRequest new]; // Tentukan nama bucket. Contoh: examplebucket. put.bucketName = @"examplebucket"; // Tentukan jalur lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam jalur lengkap. put.objectKey = @"exampledir/exampleobject.txt"; put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"]; // put.uploadingData = <NSData *>; // Unggah NSData secara langsung. // Tentukan Content-MD5. put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; OSSTask * putTask = [client putObject:put]; [putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"unggah objek berhasil!"); } else { NSLog(@"unggah objek gagal, error: %@" , task.error); } return nil; }]; // waitUntilFinished memblokir eksekusi thread saat ini tetapi tidak memblokir kemajuan tugas. // [putTask waitUntilFinished];Verifikasi CRC
Nilai CRC 64-bit dari sebuah objek dapat dihitung selama proses pengunggahan. Kode contoh berikut menunjukkan cara melakukan verifikasi CRC saat mengunggah objek:
OSSPutObjectRequest * put = [OSSPutObjectRequest new]; // Tentukan nama bucket. Contoh: examplebucket. put.bucketName = @"examplebucket"; // Tentukan jalur lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam jalur lengkap. put.objectKey = @"exampledir/exampleobject.txt"; put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"]; // put.uploadingData = <NSData *>; // Unggah NSData secara langsung. // Aktifkan verifikasi CRC. put.crcFlag = OSSRequestCRCOpen; OSSTask * putTask = [client putObject:put]; [putTask continueWithBlock:^id(OSSTask *task) { if (!task.error) { NSLog(@"unggah objek berhasil!"); } else { NSLog(@"unggah objek gagal, error: %@" , task.error); } return nil; }]; // waitUntilFinished memblokir eksekusi thread saat ini tetapi tidak memblokir kemajuan tugas. // [putTask waitUntilFinished];
Pemeriksaan integritas data dalam pengunduhan
OSS SDK untuk iOS menyediakan pemeriksaan integritas data ujung ke ujung berdasarkan nilai CRC 64-bit selama proses pengunduhan.
Jika verifikasi CRC diaktifkan, OSS secara otomatis memeriksa integritas data setelah membaca data dari aliran.
Kode contoh berikut menunjukkan cara mengaktifkan verifikasi CRC dalam pengunduhan:
OSSGetObjectRequest * request = [OSSGetObjectRequest new];
request.bucketName = @"examplebucket";
request.objectKey = @"exampledir/exampleobject.txt";
// Tentukan jalur lokal tempat objek akan diunduh.
request.downloadToFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// Aktifkan verifikasi CRC.
request.crcFlag = OSSRequestCRCOpen;
OSSTask * task = [client getObject:request];
[task continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"unduh objek berhasil!");
} else {
NSLog(@"unduh objek gagal, error: %@" ,task.error);
}
return nil;
}];
// [task waitUntilFinished];Jika blok onReceiveData disetel, Anda harus memeriksa apakah nilai CRC sama.
OSSGetObjectRequest * request = [OSSGetObjectRequest new];
request.bucketName = @"examplebucket";
request.objectKey = @"exampledir/exampleobject.txt";
// Tentukan jalur lokal tempat objek akan diunduh.
request.downloadToFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// Aktifkan verifikasi CRC.
request.crcFlag = OSSRequestCRCOpen;
__block uint64_t localCrc64 = 0;
NSMutableData *receivedData = [NSMutableData data];
request.onRecieveData = ^(NSData *data) {
if (data)
{
NSMutableData *mutableData = [data mutableCopy];
void *bytes = mutableData.mutableBytes;
localCrc64 = [OSSUtil crc64ecma:localCrc64 buffer:bytes length:data.length];
[receivedData appendData:data];
}
};
__block uint64_t remoteCrc64 = 0;
OSSTask * task = [client getObject:request];
[task continueWithBlock:^id(OSSTask *task) {
OSSGetObjectResult *result = task.result;
if (result.remoteCRC64ecma)
{
NSScanner *scanner = [NSScanner scannerWithString:result.remoteCRC64ecma];
[scanner scanUnsignedLongLong:&remoteCrc64];
if (remoteCrc64 == localCrc64)
{
NSLog(@"Verifikasi CRC-64 berhasil!");
}
else
{
NSLog(@"Verifikasi CRC-64 gagal!!");
}
}
return nil;
}];
// waitUntilFinished memblokir eksekusi thread saat ini tetapi tidak memblokir kemajuan tugas.
// [task waitUntilFinished];