すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:データセキュリティ (iOS SDK)

最終更新日:Nov 30, 2025

Object Storage Service (OSS) の iOS SDK は、アップロードとダウンロードにおけるデータセキュリティを確保するために、データ完全性チェック機能を提供します。

アップロードにおけるデータ完全性チェック

モバイルネットワークは複雑であるため、クライアントとサーバー間でデータが転送される際にエラーが発生する可能性があります。OSS は、MD5 および CRC-64 アルゴリズムに基づいたエンドツーエンドのデータ完全性チェックを提供します。

  • MD5 検証

    オブジェクトをアップロードする際にリクエストで `Content-MD5` ヘッダーを指定すると、OSS はオブジェクトに対して MD5 検証を実行し、データ完全性を確保します。受信したオブジェクトの MD5 ハッシュがリクエストで指定された `Content-MD5` の値と一致する場合にのみ、オブジェクトはアップロードされます。

    OSSPutObjectRequest * put = [OSSPutObjectRequest new];
    // バケット名を指定します。例:examplebucket。
    put.bucketName = @"examplebucket";
    // オブジェクトの完全なパスを指定します。例:exampledir/exampleobject.txt。完全なパスにバケット名を含めないでください。
    put.objectKey = @"exampledir/exampleobject.txt";
    put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
    // put.uploadingData = <NSData *>; // NSData を直接アップロードします。
    // Content-MD5 を指定します。
    put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; 
    OSSTask * putTask = [client putObject:put];
    [putTask continueWithBlock:^id(OSSTask *task) {
        if (!task.error) {
            NSLog(@"upload object success!");
        } else {
            NSLog(@"upload object failed, error: %@" , task.error);
        }
        return nil;
    }];
    // waitUntilFinished は現在のスレッドの実行をブロックしますが、タスクの進行はブロックしません。
    // [putTask waitUntilFinished];     
  • CRC 検証

    オブジェクトの 64 ビット CRC 値は、オブジェクトのアップロード中に計算できます。次のサンプルコードは、オブジェクトのアップロード時に CRC を実行する方法の例です。

    OSSPutObjectRequest * put = [OSSPutObjectRequest new];
    // バケット名を指定します。例:examplebucket。
    put.bucketName = @"examplebucket";
    // オブジェクトの完全なパスを指定します。例:exampledir/exampleobject.txt。完全なパスにバケット名を含めないでください。
    put.objectKey = @"exampledir/exampleobject.txt";
    put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
    // put.uploadingData = <NSData *>; // NSData を直接アップロードします。
    // CRC 検証を有効化します。
    put.crcFlag = OSSRequestCRCOpen;
    OSSTask * putTask = [client putObject:put];
    [putTask continueWithBlock:^id(OSSTask *task) {
        if (!task.error) {
            NSLog(@"upload object success!");
        } else {
            NSLog(@"upload object failed, error: %@" , task.error);
        }
        return nil;
    }];
    // waitUntilFinished は現在のスレッドの実行をブロックしますが、タスクの進行はブロックしません。
    // [putTask waitUntilFinished];

ダウンロードにおけるデータ完全性チェック

OSS の iOS SDK は、ダウンロード時に 64 ビット CRC 値に基づいたエンドツーエンドのデータ完全性チェックを提供します。

CRC 検証が有効化されている場合、OSS はストリームからデータを読み取った後、自動的にデータ完全性をチェックします。

次のサンプルコードは、ダウンロード時に CRC 検証を有効化する方法の例です。

OSSGetObjectRequest * request = [OSSGetObjectRequest new];
request.bucketName = @"examplebucket";
request.objectKey = @"exampledir/exampleobject.txt";
// オブジェクトのダウンロード先のローカルパスを指定します。
request.downloadToFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// CRC 検証を有効化します。
request.crcFlag = OSSRequestCRCOpen;
OSSTask * task = [client getObject:request];
[task continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"download object success!");
    } else {
        NSLog(@"download object failed, error: %@" ,task.error);
    }
    return nil;
}];
// [task waitUntilFinished];

`onReceiveData` ブロックが設定されている場合は、CRC 値が同じであるかを確認する必要があります。

OSSGetObjectRequest * request = [OSSGetObjectRequest new];
request.bucketName = @"examplebucket";
request.objectKey = @"exampledir/exampleobject.txt";
// オブジェクトのダウンロード先のローカルパスを指定します。
request.downloadToFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// 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(@"CRC-64 verification successful!");
        }
        else
        {
            NSLog(@"CRC-64 verification failed!!");
        }
   }
   return nil;
}];
// waitUntilFinished は現在のスレッドの実行をブロックしますが、タスクの進行はブロックしません。
// [task waitUntilFinished];