

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Memeriksa integritas objek di Amazon S3
<a name="checking-object-integrity"></a>

Amazon S3 menyediakan berbagai kemampuan perlindungan data di seluruh siklus hidup penyimpanan objek. Dengan Amazon S3, Anda dapat menggunakan nilai checksum untuk memverifikasi integritas data yang Anda unggah atau unduh. Selain itu, Anda dapat meminta agar nilai checksum lain dihitung untuk objek apa pun yang Anda simpan di S3.

Saat mengunggah, menyalin, atau mengelola data, Anda dapat memilih dari beberapa algoritma checksum yang didukung:
+ CRC-64/NVME () `CRC64NVME`
**catatan**  
Algoritma `CRC64NVME` checksum adalah algoritma checksum default yang digunakan untuk perhitungan checksum.
+ CRC-32 () `CRC32`
+ CRC-32C () `CRC32C`
+ SHA-1 () `SHA1`
+ SHA-256 () `SHA256`
+ MD5 (`MD5`)
**catatan**  
Untuk unggahan multibagian, operasi checksum Compute menyediakan nilai checksum objek lengkap yang digunakan`MD5`, yang tidak dimungkinkan selama pengunggahan. Untuk unggahan satu bagian, hanya `content-MD5 header` tersedia menggunakan S3 ETag untuk objek dan harus menggunakan enkripsi SSE-S3.

Saat Anda mengunggah objek ke S3, Anda dapat menentukan penggunaan salah satu algoritma checksum ini. Untuk upload, semua klien yang AWS dimiliki menghitung checksum objek dan mengirimkannya dengan permintaan upload. S3 kemudian secara independen menghitung nilai checksum objek di sisi server, dan memvalidasinya dengan nilai yang diberikan sebelum menyimpan objek dan nilai checksum. Anda juga dapat memberikan nilai yang telah dihitung sebelumnya untuk algoritme checksum ini saat Anda melakukan unggahan satu bagian atau unggahan multibagian (menggunakan tipe checksum objek lengkap untuk unggahan multibagian). Untuk menggunakan nilai yang telah dihitung sebelumnya dengan beberapa objek, gunakan AWS CLI atau AWS SDKs.

Atau, jika Anda ingin memverifikasi kumpulan data di S3 tanpa perlu memulihkan atau mengunduh data, Anda dapat menggunakan **operasi checksum Compute dengan Operasi** Batch S3. Operasi **checksum Compute** memungkinkan Anda memverifikasi miliaran objek secara efisien dalam satu permintaan pekerjaan. Ketika operasi **checksum Compute** dilakukan, S3 menghitung nilai checksum untuk daftar objek, saat istirahat. Di akhir permintaan pekerjaan, Anda akan menerima laporan integritas yang dibuat secara otomatis (juga dikenal sebagai laporan penyelesaian) yang dapat Anda gunakan untuk mengonfirmasi bahwa kumpulan data Anda tetap utuh.

**Topics**
+ [Memeriksa integritas objek untuk upload data di Amazon S3](checking-object-integrity-upload.md)
+ [Memeriksa integritas objek untuk data saat istirahat di Amazon S3](checking-object-integrity-at-rest.md)

# Memeriksa integritas objek untuk upload data di Amazon S3
<a name="checking-object-integrity-upload"></a>

Amazon S3 menggunakan nilai checksum untuk memverifikasi integritas data selama operasi upload dan download. Saat Anda mengunggah data, AWS SDK, dan Konsol Manajemen AWS menggunakan algoritma checksum yang Anda pilih untuk menghitung nilai checksum sebelum transmisi data. S3 kemudian secara independen menghitung checksum data Anda dan memvalidasinya terhadap nilai checksum yang disediakan. Objek diterima hanya setelah konfirmasi integritas data dipertahankan selama transit. S3 menyimpan nilai checksum sebagai metadata objek dan objek itu sendiri.

Untuk memverifikasi integritas objek, Anda dapat meminta nilai checksum selama unduhan. Validasi ini bekerja secara konsisten di seluruh mode enkripsi, ukuran objek, kelas penyimpanan, dan unggahan bagian tunggal dan multibagian. Untuk mengubah algoritma checksum untuk unggahan, Anda dapat menyalin objek individual atau menggunakan salinan batch untuk beberapa objek.

Untuk unggahan satu bagian, Anda dapat memberikan nilai checksum sebagai header. Anda dapat memberikan nilai yang telah dihitung sebelumnya atau membiarkan AWS SDK menghitungnya selama pengunggahan. Jika nilai checksum yang dihitung oleh S3 cocok dengan nilai yang Anda berikan, permintaan akan diterima. Jika nilai tidak cocok, permintaan akan ditolak.

Untuk unggahan multipart, secara otomatis AWS SDKs dapat membuat checksum tambahan untuk upload chunked. Saat Anda menggunakan checksum tambahan, Amazon S3 menghasilkan nilai checksum untuk setiap bagian menggunakan algoritme yang Anda tentukan dan menambahkan nilai checksum ke akhir permintaan unggahan yang dipotong. S3 melakukan verifikasi dan mengunggah dalam satu lintasan, meningkatkan efisiensi. Untuk informasi lebih lanjut, lihat[Menggunakan checksum trailing](#trailing-checksums).

## Menggunakan algoritma checksum yang didukung
<a name="using-additional-checksums"></a>

Dengan Amazon S3, Anda dapat memilih algoritma checksum untuk menghitung nilai checksum selama pengunggahan. Algoritma checksum yang ditentukan kemudian disimpan dengan objek Anda dan dapat digunakan untuk memvalidasi integritas data selama unduhan. Anda dapat memilih salah satu algoritma checksum Secure Hash Algorithms (SHA) atau Cyclic Redundancy Check (CRC) berikut untuk menghitung nilai checksum:
+ CRC-64/NVME () `CRC64NVME`
+ CRC-32 () `CRC32`
+ CRC-32C () `CRC32C`
+ SHA-1 () `SHA1`
+ SHA-256 () `SHA256`
+ MD5 (`MD5`)
**catatan**  
`content-MD5`Header hanya tersedia menggunakan S3 ETag untuk objek yang diunggah dalam satu bagian unggahan (`PUT`operasi) yang menggunakan enkripsi SSE-S3.

Selain itu, Anda dapat memberikan checksum dengan setiap permintaan menggunakan MD5 header Content-.

Saat Anda [mengunggah objek](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html), Anda menentukan algoritme yang ingin Anda gunakan: 
+ **Saat Anda menggunakan Konsol Manajemen AWS**, pilih algoritma checksum yang ingin Anda gunakan. Anda dapat secara opsional menentukan nilai checksum objek. Ketika Amazon S3 menerima objek, itu menghitung checksum dengan menggunakan algoritma yang Anda tentukan. Jika kedua nilai checksum tidak cocok, Amazon S3 menghasilkan kesalahan.
+ **Saat Anda menggunakan SDK**, perhatikan hal berikut:
  + Atur `ChecksumAlgorithm` parameter ke algoritme yang Anda inginkan Amazon S3 gunakan. Jika Anda sudah memiliki checksum yang telah dihitung sebelumnya, Anda meneruskan nilai checksum ke AWS SDK, dan SDK menyertakan nilai dalam permintaan. Jika Anda tidak meneruskan nilai checksum atau tidak menentukan algoritma checksum, SDK secara otomatis menghitung nilai checksum untuk Anda dan menyertakannya dengan permintaan untuk memberikan perlindungan integritas. Jika nilai checksum individual tidak cocok dengan nilai set algoritma checksum, Amazon S3 gagal permintaan dengan kesalahan. `BadDigest`
  + Jika Anda menggunakan SDK yang ditingkatkan, AWS SDK akan memilih algoritma checksum untuk Anda. Namun, Anda dapat mengganti algoritma checksum ini.
  + Jika Anda tidak menentukan algoritma checksum dan SDK juga tidak menghitung checksum untuk Anda, maka S3 secara otomatis memilih algoritma checksum CRC-64/NVME (). `CRC64NVME`
+ **Saat Anda menggunakan REST API**, jangan gunakan `x-amz-sdk-checksum-algorithm` parameternya. Sebagai gantinya, gunakan salah satu header khusus algoritme (misalnya,). `x-amz-checksum-crc32`

Untuk menerapkan salah satu nilai checksum ini ke objek yang sudah diunggah ke Amazon S3, Anda dapat menyalin objek dan menentukan apakah Anda ingin menggunakan algoritma checksum yang ada atau yang baru. Jika Anda tidak menentukan algoritma, S3 menggunakan algoritma yang ada. Jika objek sumber tidak memiliki algoritma checksum atau nilai checksum tertentu, Amazon S3 menggunakan algoritma CRC-64/NVME untuk menghitung nilai checksum untuk objek tujuan. Anda juga dapat menentukan algoritma checksum saat menyalin objek menggunakan Operasi [Batch S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html).

**penting**  
Jika Anda menggunakan unggahan multibagian dengan **Checksum untuk checksum** komposit (atau tingkat bagian), nomor bagian unggahan multibagian harus berurutan dan dimulai dengan 1. Jika Anda mencoba menyelesaikan permintaan unggahan multibagian dengan nomor bagian yang tidak berurutan, Amazon S3 menghasilkan kesalahan. `HTTP 500 Internal Server`

## Objek lengkap dan jenis checksum komposit
<a name="ChecksumTypes-Uploads"></a>

Di Amazon S3, ada dua jenis checksum yang didukung:
+ **Checksum objek lengkap:** Checksum objek lengkap dihitung berdasarkan semua konten unggahan multipart, yang mencakup semua data dari byte pertama bagian pertama hingga byte terakhir dari bagian terakhir. Ketahuilah bahwa jika Anda menggunakan Konsol Manajemen AWS untuk mengunggah objek yang lebih kecil dari 16 MB, hanya tipe checksum objek lengkap yang didukung. 
**catatan**  
Semua permintaan PUT memerlukan jenis checksum objek lengkap. Anda harus menentukan jenis checksum objek lengkap jika Anda mengunggah objek Anda melalui permintaan PUT.
+ **Checksum komposit:** Checksum komposit dihitung berdasarkan checksum individual dari setiap bagian dalam unggahan multibagian. Alih-alih menghitung checksum berdasarkan semua konten data, pendekatan ini menggabungkan checksum tingkat bagian (dari bagian pertama hingga yang terakhir) untuk menghasilkan checksum gabungan tunggal untuk objek lengkap. Jika Anda menggunakan unggahan multipart untuk mengunggah objek Anda, maka Anda harus menentukan jenis checksum komposit. 
**catatan**  
Ketika sebuah objek diunggah sebagai unggahan multipart, tag entitas (ETag) untuk objek bukanlah MD5 intisari dari seluruh objek. Sebagai gantinya, Amazon S3 menghitung MD5 intisari setiap bagian saat diunggah. MD5 Intisari digunakan ETag untuk menentukan objek akhir. Amazon S3 menggabungkan byte untuk MD5 intisari bersama-sama dan kemudian menghitung intisari nilai gabungan ini. MD5 Selama langkah ETag pembuatan terakhir, Amazon S3 menambahkan tanda hubung dengan jumlah total bagian sampai akhir.

Amazon S3 mendukung objek lengkap berikut dan jenis algoritma checksum komposit:
+ CRC-64/NVME (`CRC64NVME`): Mendukung jenis checksum objek penuh saja.
+ CRC-32 (`CRC32`): Mendukung objek penuh dan jenis checksum komposit.
+ CRC-32C (`CRC32C`): Mendukung objek penuh dan jenis checksum komposit.
+ SHA-1 (`SHA1`): Mendukung objek penuh dan jenis checksum komposit.
+ SHA-256 (`SHA256`): Mendukung objek penuh dan jenis checksum komposit.
+ MD5 (`MD5`): Mendukung objek penuh dan jenis checksum komposit.

### Unggahan satu bagian
<a name="SinglePartUploads-Checksums"></a>

Checksum objek yang diunggah dalam satu bagian (menggunakan [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html#API_PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html#API_PutObject)) diperlakukan sebagai checksum objek lengkap. Saat mengunggah objek di konsol Amazon S3, Anda dapat memilih algoritma checksum yang ingin digunakan S3 dan juga (opsional) memberikan nilai yang telah dihitung sebelumnya. Amazon S3 kemudian memvalidasi nilai checksum yang telah dihitung sebelumnya sebelum menyimpan objek dan nilai checksum-nya. Anda dapat memverifikasi integritas data objek saat meminta nilai checksum selama pengunduhan objek.

### Unggahan multipart
<a name="MultipartUploads-Checksums"></a>

Saat mengunggah objek di beberapa bagian menggunakan [https://docs.aws.amazon.com/AmazonS3/latest/API/API_MultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_MultipartUpload.html)API, Anda dapat menentukan algoritma checksum yang ingin digunakan Amazon S3 dan jenis checksum (objek lengkap atau komposit). 

 Tabel berikut menunjukkan jenis algoritma checksum yang didukung untuk setiap algoritma checksum dalam unggahan multipart:


| Algoritma checksum | Objek penuh | Komposit | 
| --- | --- | --- | 
| CRC-64/NVME () CRC64NVME | Ya | Tidak | 
| CRC-32 () CRC32 | Ya | Ya | 
| CRC-32C () CRC32C | Ya | Ya | 
| SHA-1 () SHA1 | Tidak | Ya | 
| SHA-256 () SHA256 | Tidak | Ya | 

## Menggunakan checksum objek lengkap untuk unggahan multipart
<a name="Full-object-checksums"></a>

Saat membuat atau melakukan unggahan multibagian, Anda dapat menggunakan checksum objek lengkap untuk validasi saat diunggah. Ini berarti Anda dapat menyediakan algoritme checksum untuk [https://docs.aws.amazon.com/AmazonS3/latest/API/API_MultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_MultipartUpload.html)API, menyederhanakan alat validasi integritas karena Anda tidak perlu lagi melacak batas bagian untuk objek yang diunggah. Anda dapat memberikan checksum seluruh objek dalam [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)permintaan, bersama dengan ukuran objek.

Saat Anda memberikan checksum objek lengkap selama pengunggahan multibagian, AWS SDK meneruskan checksum ke Amazon S3, dan S3 memvalidasi sisi server integritas objek, membandingkannya dengan nilai yang diterima. Kemudian, Amazon S3 menyimpan objek jika nilainya cocok. Jika kedua nilai tidak cocok, S3 gagal permintaan dengan `BadDigest` kesalahan. Checksum objek Anda juga disimpan dalam metadata objek yang Anda gunakan nanti untuk memvalidasi integritas data objek.

Untuk checksum objek lengkap, Anda dapat menggunakan algoritma checksum CRC-64/NVME (`CRC64NVME`), CRC-32 (), atau CRC-32C (`CRC32`) di S3. `CRC32C` Checksum objek lengkap dalam unggahan multibagian hanya tersedia untuk checksum berbasis CRC karena mereka dapat linier menjadi checksum objek lengkap. Linearisasi ini memungkinkan Amazon S3 untuk memparalelkan permintaan Anda untuk meningkatkan kinerja. Secara khusus, S3 dapat menghitung checksum seluruh objek dari checksum tingkat bagian. Jenis validasi ini tidak tersedia untuk algoritma lain, seperti SHA dan. MD5 Karena S3 memiliki perlindungan integritas default, jika objek diunggah tanpa checksum, S3 secara otomatis melampirkan algoritma checksum objek penuh CRC-64/NVME () yang direkomendasikan ke objek. `CRC64NVME`

**catatan**  
Untuk memulai unggahan multipart, Anda dapat menentukan algoritma checksum dan jenis checksum objek lengkap. Setelah Anda menentukan algoritma checksum dan jenis checksum objek lengkap, Anda dapat memberikan nilai checksum objek lengkap untuk unggahan multipart.

## Menggunakan checksum tingkat suku cadang untuk unggahan multipart
<a name="Part-level-checksums"></a>

Ketika objek diunggah ke Amazon S3, mereka dapat diunggah sebagai objek tunggal atau diunggah dalam beberapa bagian dengan proses pengunggahan multibagian. Anda dapat memilih jenis **Checksum** untuk unggahan multipart Anda. Untuk checksum tingkat suku cadang unggahan multibagian (atau checksum komposit), Amazon S3 menghitung checksum untuk setiap bagian individual dengan menggunakan algoritma checksum yang ditentukan. Anda dapat menggunakan [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)untuk memberikan nilai checksum untuk setiap bagian. Jika objek yang Anda coba unggah di konsol Amazon S3 diatur untuk menggunakan algoritma checksum CRC-64/NVME (`CRC64NVME`) dan melebihi 16 MB, objek tersebut secara otomatis ditetapkan sebagai checksum objek lengkap.

Amazon S3 kemudian menggunakan nilai checksum tingkat bagian yang disimpan untuk mengonfirmasi bahwa setiap bagian diunggah dengan benar. Ketika checksum setiap bagian (untuk seluruh objek) disediakan, S3 menggunakan nilai checksum yang disimpan dari setiap bagian untuk menghitung checksum objek lengkap secara internal, membandingkannya dengan nilai checksum yang disediakan. Ini meminimalkan biaya komputasi karena S3 dapat menghitung checksum seluruh objek menggunakan checksum bagian. Untuk informasi selengkapnya tentang unggahan multipart, lihat [Mengunggah dan menyalin objek menggunakan unggahan multipart di Amazon S3](mpuoverview.md) dan. [Menggunakan checksum objek lengkap untuk unggahan multipart](#Full-object-checksums)

Ketika objek benar-benar diunggah, Anda dapat menggunakan checksum terhitung akhir untuk memverifikasi integritas data objek.

Saat mengunggah bagian dari unggahan multipart, perhatikan hal-hal berikut: 
+ Untuk mengambil informasi tentang objek, termasuk berapa banyak bagian yang membentuk seluruh objek, Anda dapat menggunakan [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html)operasi. Dengan checksum tambahan, Anda juga dapat memulihkan informasi untuk setiap bagian individual yang menyertakan nilai checksum bagian tersebut.
+ Untuk upload selesai, Anda bisa mendapatkan checksum bagian individual dengan menggunakan [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)operasi [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)atau dan menentukan nomor bagian atau rentang byte yang sejajar dengan satu bagian. Jika Anda ingin mengambil nilai checksum untuk masing-masing bagian dari unggahan multibagian yang masih berlangsung, Anda dapat menggunakannya. [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html)
+ Oleh karena cara Amazon S3 menghitung checksum untuk objek multibagian, nilai checksum untuk objek mungkin berubah jika Anda menyalinnya. Jika Anda menggunakan SDK atau REST API dan menelepon [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html), Amazon S3 menyalin objek apa pun hingga batasan ukuran `CopyObject` operasi API. Amazon S3 melakukan penyalinan ini sebagai tindakan tunggal, terlepas dari apakah objek diunggah dalam satu permintaan atau sebagai bagian dari unggahan multibagian. Dengan perintah salin, checksum objek adalah checksum langsung dari objek penuh. Jika objek awalnya diunggah menggunakan unggahan multibagian, nilai checksum berubah meskipun datanya tidak.
+ Objek yang lebih besar dari batasan ukuran operasi `CopyObject` API harus menggunakan [perintah salinan unggah multibagian](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CopyingObjectsMPUapi.html).
+ Saat Anda melakukan beberapa operasi menggunakan Konsol Manajemen AWS, Amazon S3 menggunakan unggahan multibagian jika objek berukuran lebih besar dari 16 MB.

## Metode checksum
<a name="ChecksumMethods"></a>

Setelah mengunggah objek, Anda bisa mendapatkan nilai checksum dan membandingkannya dengan nilai checksum yang telah dihitung sebelumnya atau disimpan sebelumnya dari jenis algoritma checksum yang sama. Contoh berikut menunjukkan metode perhitungan checksum mana yang dapat Anda gunakan untuk memverifikasi integritas data.

### Menggunakan konsol S3
<a name="CheckObjectIntegrityConsole"></a>

Untuk mempelajari lebih lanjut tentang menggunakan konsol dan menentukan algoritma checksum yang akan digunakan saat mengunggah objek, lihat [Mengunggah Objek](upload-objects.md) dan [Tutorial: Memeriksa integritas data di Amazon S3 dengan checksum tambahan](https://aws.amazon.com/getting-started/hands-on/amazon-s3-with-additional-checksums/?ref=docs_gateway/amazons3/checking-object-integrity.html).

### Menggunakan AWS SDKs
<a name="CheckObjectIntegritySDK"></a>

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan AWS SDKs untuk meng-upload file besar dengan upload multipart, men-download file besar, dan memvalidasi file upload multipart, semua dengan menggunakan SHA-256 untuk validasi file.

------
#### [ Java ]

**Example Contoh: Mengunggah, mengunduh, dan memverifikasi file yang berukuran besar dengan SHA-256**  
Untuk petunjuk cara membuat dan menguji sampel yang berfungsi, lihat [Memulai](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) di Panduan AWS SDK untuk Java Pengembang.  

```
    import software.amazon.awssdk.auth.credentials.AwsCredentials;
    import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
    import software.amazon.awssdk.core.ResponseInputStream;
    import software.amazon.awssdk.core.sync.RequestBody;
    import software.amazon.awssdk.regions.Region;
    import software.amazon.awssdk.services.s3.S3Client;
    import software.amazon.awssdk.services.s3.model.AbortMultipartUploadRequest;
    import software.amazon.awssdk.services.s3.model.ChecksumAlgorithm;
    import software.amazon.awssdk.services.s3.model.ChecksumMode;
    import software.amazon.awssdk.services.s3.model.CompleteMultipartUploadRequest;
    import software.amazon.awssdk.services.s3.model.CompleteMultipartUploadResponse;
    import software.amazon.awssdk.services.s3.model.CompletedMultipartUpload;
    import software.amazon.awssdk.services.s3.model.CompletedPart;
    import software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest;
    import software.amazon.awssdk.services.s3.model.CreateMultipartUploadResponse;
    import software.amazon.awssdk.services.s3.model.GetObjectAttributesRequest;
    import software.amazon.awssdk.services.s3.model.GetObjectAttributesResponse;
    import software.amazon.awssdk.services.s3.model.GetObjectRequest;
    import software.amazon.awssdk.services.s3.model.GetObjectResponse;
    import software.amazon.awssdk.services.s3.model.GetObjectTaggingRequest;
    import software.amazon.awssdk.services.s3.model.ObjectAttributes;
    import software.amazon.awssdk.services.s3.model.PutObjectTaggingRequest;
    import software.amazon.awssdk.services.s3.model.Tag;
    import software.amazon.awssdk.services.s3.model.Tagging;
    import software.amazon.awssdk.services.s3.model.UploadPartRequest;
    import software.amazon.awssdk.services.s3.model.UploadPartResponse;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.nio.ByteBuffer;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.ArrayList;
    import java.util.Base64;
    import java.util.List;
     
    public class LargeObjectValidation {
        private static String FILE_NAME = "sample.file";
        private static String BUCKET = "sample-bucket";
        //Optional, if you want a method of storing the full multipart object checksum in S3.
        private static String CHECKSUM_TAG_KEYNAME = "fullObjectChecksum";
        //If you have existing full-object checksums that you need to validate against, you can do the full object validation on a sequential upload.
        private static String SHA256_FILE_BYTES = "htCM5g7ZNdoSw8bN/mkgiAhXt5MFoVowVg+LE9aIQmI=";
        //Example Chunk Size - this must be greater than or equal to 5MB.
        private static int CHUNK_SIZE = 5 * 1024 * 1024;
     
        public static void main(String[] args) {
            S3Client s3Client = S3Client.builder()
                    .region(Region.US_EAST_1)
                    .credentialsProvider(new AwsCredentialsProvider() {
                        @Override
                        public AwsCredentials resolveCredentials() {
                            return new AwsCredentials() {
                                @Override
                                public String accessKeyId() {
                                    return Constants.ACCESS_KEY;
                                }
     
                                @Override
                                public String secretAccessKey() {
                                    return Constants.SECRET;
                                }
                            };
                        }
                    })
                    .build();
            uploadLargeFileBracketedByChecksum(s3Client);
            downloadLargeFileBracketedByChecksum(s3Client);
            validateExistingFileAgainstS3Checksum(s3Client);
        }
     
        public static void uploadLargeFileBracketedByChecksum(S3Client s3Client) {
            System.out.println("Starting uploading file validation");
            File file = new File(FILE_NAME);
            try (InputStream in = new FileInputStream(file)) {
                MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
                CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder()
                        .bucket(BUCKET)
                        .key(FILE_NAME)
                        .checksumAlgorithm(ChecksumAlgorithm.SHA256)
                        .build();
                CreateMultipartUploadResponse createdUpload = s3Client.createMultipartUpload(createMultipartUploadRequest);
                List<CompletedPart> completedParts = new ArrayList<CompletedPart>();
                int partNumber = 1;
                byte[] buffer = new byte[CHUNK_SIZE];
                int read = in.read(buffer);
                while (read != -1) {
                    UploadPartRequest uploadPartRequest = UploadPartRequest.builder()
                            .partNumber(partNumber).uploadId(createdUpload.uploadId()).key(FILE_NAME).bucket(BUCKET).checksumAlgorithm(ChecksumAlgorithm.SHA256).build();
                    UploadPartResponse uploadedPart = s3Client.uploadPart(uploadPartRequest, RequestBody.fromByteBuffer(ByteBuffer.wrap(buffer, 0, read)));
                    CompletedPart part = CompletedPart.builder().partNumber(partNumber).checksumSHA256(uploadedPart.checksumSHA256()).eTag(uploadedPart.eTag()).build();
                    completedParts.add(part);
                    sha256.update(buffer, 0, read);
                    read = in.read(buffer);
                    partNumber++;
                }
                String fullObjectChecksum = Base64.getEncoder().encodeToString(sha256.digest());
                if (!fullObjectChecksum.equals(SHA256_FILE_BYTES)) {
                    //Because the SHA256 is uploaded after the part is uploaded; the upload is bracketed and the full object can be fully validated.
                    s3Client.abortMultipartUpload(AbortMultipartUploadRequest.builder().bucket(BUCKET).key(FILE_NAME).uploadId(createdUpload.uploadId()).build());
                    throw new IOException("Byte mismatch between stored checksum and upload, do not proceed with upload and cleanup");
                }
                CompletedMultipartUpload completedMultipartUpload = CompletedMultipartUpload.builder().parts(completedParts).build();
                CompleteMultipartUploadResponse completedUploadResponse = s3Client.completeMultipartUpload(
                        CompleteMultipartUploadRequest.builder().bucket(BUCKET).key(FILE_NAME).uploadId(createdUpload.uploadId()).multipartUpload(completedMultipartUpload).build());
                Tag checksumTag = Tag.builder().key(CHECKSUM_TAG_KEYNAME).value(fullObjectChecksum).build();
                //Optionally, if you need the full object checksum stored with the file; you could add it as a tag after completion.
                s3Client.putObjectTagging(PutObjectTaggingRequest.builder().bucket(BUCKET).key(FILE_NAME).tagging(Tagging.builder().tagSet(checksumTag).build()).build());
            } catch (IOException | NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            GetObjectAttributesResponse
                    objectAttributes = s3Client.getObjectAttributes(GetObjectAttributesRequest.builder().bucket(BUCKET).key(FILE_NAME)
                    .objectAttributes(ObjectAttributes.OBJECT_PARTS, ObjectAttributes.CHECKSUM).build());
            System.out.println(objectAttributes.objectParts().parts());
            System.out.println(objectAttributes.checksum().checksumSHA256());
        }
     
        public static void downloadLargeFileBracketedByChecksum(S3Client s3Client) {
            System.out.println("Starting downloading file validation");
            File file = new File("DOWNLOADED_" + FILE_NAME);
            try (OutputStream out = new FileOutputStream(file)) {
                GetObjectAttributesResponse
                        objectAttributes = s3Client.getObjectAttributes(GetObjectAttributesRequest.builder().bucket(BUCKET).key(FILE_NAME)
                        .objectAttributes(ObjectAttributes.OBJECT_PARTS, ObjectAttributes.CHECKSUM).build());
                //Optionally if you need the full object checksum, you can grab a tag you added on the upload
                List<Tag> objectTags = s3Client.getObjectTagging(GetObjectTaggingRequest.builder().bucket(BUCKET).key(FILE_NAME).build()).tagSet();
                String fullObjectChecksum = null;
                for (Tag objectTag : objectTags) {
                    if (objectTag.key().equals(CHECKSUM_TAG_KEYNAME)) {
                        fullObjectChecksum = objectTag.value();
                        break;
                    }
                }
                MessageDigest sha256FullObject = MessageDigest.getInstance("SHA-256");
                MessageDigest sha256ChecksumOfChecksums = MessageDigest.getInstance("SHA-256");
     
                //If you retrieve the object in parts, and set the ChecksumMode to enabled, the SDK will automatically validate the part checksum
                for (int partNumber = 1; partNumber <= objectAttributes.objectParts().totalPartsCount(); partNumber++) {
                    MessageDigest sha256Part = MessageDigest.getInstance("SHA-256");
                    ResponseInputStream<GetObjectResponse> response = s3Client.getObject(GetObjectRequest.builder().bucket(BUCKET).key(FILE_NAME).partNumber(partNumber).checksumMode(ChecksumMode.ENABLED).build());
                    GetObjectResponse getObjectResponse = response.response();
                    byte[] buffer = new byte[CHUNK_SIZE];
                    int read = response.read(buffer);
                    while (read != -1) {
                        out.write(buffer, 0, read);
                        sha256FullObject.update(buffer, 0, read);
                        sha256Part.update(buffer, 0, read);
                        read = response.read(buffer);
                    }
                    byte[] sha256PartBytes = sha256Part.digest();
                    sha256ChecksumOfChecksums.update(sha256PartBytes);
                    //Optionally, you can do an additional manual validation again the part checksum if needed in addition to the SDK check
                    String base64PartChecksum = Base64.getEncoder().encodeToString(sha256PartBytes);
                    String base64PartChecksumFromObjectAttributes = objectAttributes.objectParts().parts().get(partNumber - 1).checksumSHA256();
                    if (!base64PartChecksum.equals(getObjectResponse.checksumSHA256()) || !base64PartChecksum.equals(base64PartChecksumFromObjectAttributes)) {
                        throw new IOException("Part checksum didn't match for the part");
                    }
                    System.out.println(partNumber + " " + base64PartChecksum);
                }
                //Before finalizing, do the final checksum validation.
                String base64FullObject = Base64.getEncoder().encodeToString(sha256FullObject.digest());
                String base64ChecksumOfChecksums = Base64.getEncoder().encodeToString(sha256ChecksumOfChecksums.digest());
                if (fullObjectChecksum != null && !fullObjectChecksum.equals(base64FullObject)) {
                    throw new IOException("Failed checksum validation for full object");
                }
                System.out.println(fullObjectChecksum);
                String base64ChecksumOfChecksumFromAttributes = objectAttributes.checksum().checksumSHA256();
                if (base64ChecksumOfChecksumFromAttributes != null && !base64ChecksumOfChecksums.equals(base64ChecksumOfChecksumFromAttributes)) {
                    throw new IOException("Failed checksum validation for full object checksum of checksums");
                }
                System.out.println(base64ChecksumOfChecksumFromAttributes);
                out.flush();
            } catch (IOException | NoSuchAlgorithmException e) {
                //Cleanup bad file
                file.delete();
                e.printStackTrace();
            }
        }
     
        public static void validateExistingFileAgainstS3Checksum(S3Client s3Client) {
            System.out.println("Starting existing file validation");
            File file = new File("DOWNLOADED_" + FILE_NAME);
            GetObjectAttributesResponse
                    objectAttributes = s3Client.getObjectAttributes(GetObjectAttributesRequest.builder().bucket(BUCKET).key(FILE_NAME)
                    .objectAttributes(ObjectAttributes.OBJECT_PARTS, ObjectAttributes.CHECKSUM).build());
            try (InputStream in = new FileInputStream(file)) {
                MessageDigest sha256ChecksumOfChecksums = MessageDigest.getInstance("SHA-256");
                MessageDigest sha256Part = MessageDigest.getInstance("SHA-256");
                byte[] buffer = new byte[CHUNK_SIZE];
                int currentPart = 0;
                int partBreak = objectAttributes.objectParts().parts().get(currentPart).size();
                int totalRead = 0;
                int read = in.read(buffer);
                while (read != -1) {
                    totalRead += read;
                    if (totalRead >= partBreak) {
                        int difference = totalRead - partBreak;
                        byte[] partChecksum;
                        if (totalRead != partBreak) {
                            sha256Part.update(buffer, 0, read - difference);
                            partChecksum = sha256Part.digest();
                            sha256ChecksumOfChecksums.update(partChecksum);
                            sha256Part.reset();
                            sha256Part.update(buffer, read - difference, difference);
                        } else {
                            sha256Part.update(buffer, 0, read);
                            partChecksum = sha256Part.digest();
                            sha256ChecksumOfChecksums.update(partChecksum);
                            sha256Part.reset();
                        }
                        String base64PartChecksum = Base64.getEncoder().encodeToString(partChecksum);
                        if (!base64PartChecksum.equals(objectAttributes.objectParts().parts().get(currentPart).checksumSHA256())) {
                            throw new IOException("Part checksum didn't match S3");
                        }
                        currentPart++;
                        System.out.println(currentPart + " " + base64PartChecksum);
                        if (currentPart < objectAttributes.objectParts().totalPartsCount()) {
                            partBreak += objectAttributes.objectParts().parts().get(currentPart - 1).size();
                        }
                    } else {
                        sha256Part.update(buffer, 0, read);
                    }
                    read = in.read(buffer);
                }
                if (currentPart != objectAttributes.objectParts().totalPartsCount()) {
                    currentPart++;
                    byte[] partChecksum = sha256Part.digest();
                    sha256ChecksumOfChecksums.update(partChecksum);
                    String base64PartChecksum = Base64.getEncoder().encodeToString(partChecksum);
                    System.out.println(currentPart + " " + base64PartChecksum);
                }
     
                String base64CalculatedChecksumOfChecksums = Base64.getEncoder().encodeToString(sha256ChecksumOfChecksums.digest());
                System.out.println(base64CalculatedChecksumOfChecksums);
                System.out.println(objectAttributes.checksum().checksumSHA256());
                if (!base64CalculatedChecksumOfChecksums.equals(objectAttributes.checksum().checksumSHA256())) {
                    throw new IOException("Full object checksum of checksums don't match S3");
                }
     
            } catch (IOException | NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
    }
```

------

### Penggunaan API REST
<a name="CheckObjectIntegrityREST"></a>

Anda dapat mengirim permintaan REST untuk mengunggah objek dengan nilai checksum untuk memverifikasi integritas data dengan [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html). Anda juga dapat mengambil nilai checksum untuk objek yang menggunakan [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)atau. [HeadObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)

### Menggunakan AWS CLI
<a name="CheckObjectIntegrityCLI"></a>

Anda dapat mengirim permintaan `PUT` untuk mengunggah objek hingga 5 GB dalam satu operasi. Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html#examples](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html#examples) di *Referensi Perintah AWS CLI *. Anda juga dapat menggunakan [https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html) dan [https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html) untuk mengambil checksum dari objek yang sudah diunggah guna memverifikasi integritas data.

*Untuk selengkapnya, lihat [FAQ Amazon S3 CLI](https://docs.aws.amazon.com/cli/latest/topic/s3-faq.html) di Panduan Pengguna.AWS Command Line Interface * 

## Menggunakan Konten- MD5 saat mengunggah objek
<a name="checking-object-integrity-md5"></a>

Cara lain untuk memverifikasi integritas objek Anda setelah mengunggah adalah dengan memberikan MD5 intisari objek saat Anda mengunggahnya. Jika Anda menghitung MD5 intisari untuk objek Anda, Anda dapat memberikan intisari dengan `PUT` perintah dengan menggunakan header. `Content-MD5` 

Setelah mengunggah objek, Amazon S3 menghitung MD5 intisari objek dan membandingkannya dengan nilai yang Anda berikan. Permintaan hanya berhasil jika kedua intisari cocok. 

Menyediakan MD5 intisari tidak diperlukan, tetapi Anda dapat menggunakannya untuk memverifikasi integritas objek sebagai bagian dari proses pengunggahan.

## Menggunakan Konten- MD5 dan ETag untuk memverifikasi objek yang diunggah
<a name="checking-object-integrity-etag-and-md5"></a>

Tag entitas (ETag) untuk objek mewakili versi tertentu dari objek tersebut. Perlu diingat bahwa ETag satu-satunya mencerminkan perubahan pada konten objek, bukan perubahan metadatanya. Jika hanya metadata suatu objek yang berubah, ETag tetap sama. 

Tergantung pada objek, objek mungkin merupakan MD5 intisari dari data objek: ETag 
+ Jika objek dibuat oleh,, atau `CopyObject` operasi `PutObject``PostObject`, atau melalui Konsol Manajemen AWS, dan objek itu juga teks biasa atau dienkripsi oleh enkripsi sisi server dengan kunci terkelola Amazon S3 (SSE-S3), objek tersebut memiliki intisari data objeknya. ETag MD5 
+ Jika objek dibuat oleh,, atau `CopyObject` operasi `PutObject``PostObject`, atau melalui Konsol Manajemen AWS, dan objek itu dienkripsi oleh enkripsi sisi server dengan kunci yang disediakan pelanggan (SSE-C) atau enkripsi sisi server dengan () kunci (SSE-KMS AWS KMS), objek tersebut memiliki intisari data objeknya. AWS Key Management Service ETag MD5 
+ Jika objek dibuat oleh proses upload multipart atau `UploadPartCopy` operasi, objek ETag bukanlah MD5 intisari, terlepas dari metode enkripsi. Jika objek lebih besar dari 16 MB, Konsol Manajemen AWS upload atau copy objek tersebut sebagai upload multipart, dan oleh karena itu ETag bukan MD5 intisari.

Untuk objek yang ETag merupakan `Content-MD5` intisari objek, Anda dapat membandingkan ETag nilai objek dengan `Content-MD5` intisari yang dihitung atau disimpan sebelumnya.

## Menggunakan checksum trailing
<a name="trailing-checksums"></a>

Saat mengunggah objek besar ke Amazon S3, Anda dapat memberikan checksum yang telah dihitung sebelumnya untuk objek tersebut atau menggunakan SDK untuk secara otomatis membuat checksum AWS tambahan untuk unggahan yang dipotong, atas nama Anda. Jika Anda menggunakan checksum tambahan, Amazon S3 secara otomatis menghasilkan nilai checksum dengan menggunakan algoritme yang ditentukan untuk memvalidasi integritas objek dalam unggahan yang dipotong, saat Anda mengunggah objek. 

Untuk membuat checksum tambahan saat menggunakan AWS SDK, isi `ChecksumAlgorithm` parameter dengan algoritme pilihan Anda. SDK menggunakan algoritme tersebut untuk menghitung nilai checksum untuk objek Anda (atau bagian objek) dan secara otomatis menambahkannya ke akhir permintaan unggahan yang dipotong. Perilaku ini menghemat waktu Anda, sebab Amazon S3 melakukan verifikasi dan pengunggahan data Anda dalam sekali jalan.

**penting**  
Jika Anda menggunakan S3 Lambda Objek, semua permintaan ke S3 Lambda Objek ditandatangani menggunakan, `s3-object-lambda` dan bukan `s3`. Perilaku ini memengaruhi tanda tangan nilai checksum trailing. Untuk informasi selengkapnya tentang S3 Lambda Objek, lihat [Mengubah objek dengan S3 Lambda Objek](transforming-objects.md).

### Header checksum tertinggal
<a name="trailing-checksums-headers"></a>

Untuk membuat permintaan pengkodean konten yang dipotong, Amazon S3 mengharuskan server klien menyertakan beberapa header untuk mengurai permintaan dengan benar. Server klien harus menyertakan header berikut:
+ **`x-amz-decoded-content-length`:** Header ini menunjukkan ukuran plaintext dari data aktual yang sedang diunggah ke Amazon S3 dengan permintaan.
+ **`x-amz-content-sha256`:** Header ini menunjukkan jenis unggahan chunked yang disertakan dalam permintaan. Untuk unggahan terpotong dengan checksum tambahan, nilai header adalah `STREAMING-UNSIGNED-PAYLOAD-TRAILER` untuk permintaan yang tidak menggunakan penandatanganan payload dan `STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER` untuk permintaan yang menggunakan penandatanganan payload SigV4. (Untuk informasi selengkapnya tentang penerapan payload yang ditandatangani, lihat [Perhitungan tanda tangan untuk header otorisasi: Mentransfer muatan dalam beberapa potongan](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-streaming.html).)
+ **`x-amz-trailer`:** Header ini menunjukkan nama header trailing dalam permintaan. Jika checksum tambahan ada (di mana AWS SDKs menambahkan checksum ke badan permintaan yang dikodekan), nilai `x-amz-trailer` header menyertakan awalan dan diakhiri dengan nama algoritme. `x-amz-checksum-` `x-amz-trailer`Nilai-nilai berikut saat ini didukung:
  + `x-amz-checksum-crc32`
  + `x-amz-checksum-crc32c`
  + `x-amz-checksum-crc64nvme`
  + `x-amz-checksum-sha1`
  + `x-amz-checksum-sha256`

**catatan**  
Anda juga dapat menyertakan `Content-Encoding` header, dengan nilai chunked, dalam permintaan Anda. Meskipun header ini tidak diperlukan, termasuk header ini dapat meminimalkan masalah proxy HTTP saat mentransmisikan data yang dikodekan. Jika `Content-Encoding` header lain (seperti gzip) ada dalam permintaan, `Content-Encoding` header menyertakan nilai chunked dalam daftar pengkodean yang dipisahkan koma. Misalnya, `Content-Encoding: aws-chunked, gzip`. 

### Bagian terpotong
<a name="trailing-checksums-chunks"></a>

Saat Anda mengunggah objek ke Amazon S3 menggunakan encoding chunked, permintaan upload menyertakan jenis potongan berikut (diformat dalam urutan yang tercantum):
+ **Potongan badan objek:** Mungkin ada satu, beberapa, atau nol potongan tubuh yang terkait dengan permintaan unggahan terpotong. 
+ **Potongan penyelesaian:** Mungkin ada satu, beberapa, atau nol potongan tubuh yang terkait dengan permintaan unggahan yang terpotong. 
+ **Potongan trailing: Checksum** trailing terdaftar setelah potongan penyelesaian. Hanya satu potongan trailing yang diizinkan.

**catatan**  
 Setiap unggahan yang terpotong harus diakhiri dengan CRLF akhir (seperti`\r\n`) untuk menunjukkan akhir permintaan. 

Untuk contoh pemformatan chunked, lihat. [Contoh: Unggahan yang dipotong dengan checksum tambahan](#example-chunked-uploads-trailing)

#### Potongan tubuh objek
<a name="trailing-checksums-object-body-chunks"></a>

Potongan tubuh objek adalah potongan yang berisi data objek aktual yang sedang diunggah ke S3. Potongan ini memiliki batasan ukuran dan format yang konsisten.

##### Ukuran potongan tubuh objek
<a name="trailing-checksums-object-body-chunks-size"></a>

Potongan ini harus berisi setidaknya 8.192 byte (atau 8 KiB) data objek, kecuali untuk potongan tubuh akhir, yang bisa lebih kecil. Tidak ada ukuran potongan maksimum eksplisit tetapi Anda dapat mengharapkan semua potongan lebih kecil dari ukuran unggah maksimum 5 GB. Ukuran potongan dapat bervariasi dari satu potongan ke potongan berikutnya berdasarkan implementasi server klien Anda.

##### Format potongan tubuh objek
<a name="trailing-checksums-object-body-chunks-format"></a>

Potongan tubuh objek dimulai dengan pengkodean heksadesimal dari jumlah byte dalam potongan tubuh objek, diikuti oleh CRLF (Carriage Return Line Feed), byte objek untuk potongan itu, dan CRLF lainnya. 

Contoh:

```
hex-encoding-of-object-bytes-in-chunk\r\n
chunk-object-bytes\r\n
```

Namun, ketika potongan ditandatangani, potongan tubuh objek mengikuti format yang berbeda, di mana tanda tangan ditambahkan ke ukuran potongan dengan pembatas titik koma. Contoh:

```
hex-encoding-of-object-bytes-in-chunk;chunk-signature\r\n
 chunk-object-bytes\r\n
```

Untuk informasi selengkapnya tentang penandatanganan potongan, lihat [Perhitungan tanda tangan untuk Authorization Header: Mentransfer muatan dalam beberapa potongan (AWS](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-streaming.html)Versi Tanda Tangan 4). *Untuk informasi selengkapnya tentang pemformatan potongan, lihat [Pengkodean transfer terpotong](https://www.rfc-editor.org/rfc/rfc9112#name-chunked-transfer-coding) di situs web Editor RFC.*

#### Potongan penyelesaian
<a name="trailing-checksums-completion-chunks"></a>

Potongan penyelesaian diperlukan untuk menjadi potongan tubuh objek terakhir dari setiap unggahan yang terpotong. Format potongan penyelesaian mirip dengan potongan tubuh, tetapi selalu berisi nol byte data objek. (Byte nol dari data objek menunjukkan bahwa semua data telah diunggah.) Unggahan yang terpotong harus menyertakan potongan penyelesaian sebagai potongan tubuh objek terakhirnya, mengikuti format seperti ini:

```
0\r\n
```

Namun, jika permintaan pengkodean konten menggunakan penandatanganan payload, itu mengikuti format ini sebagai gantinya:

```
0;chunk-signature\r\n
```

#### Potongan trailer
<a name="trailing-checksums-trailer-chunks"></a>

Potongan trailer menyimpan checksum yang dihitung untuk semua permintaan unggahan S3. Potongan trailer mencakup dua bidang: satu bidang nama header dan satu bidang nilai header. Bidang nama header untuk permintaan upload harus sesuai dengan nilai yang diteruskan ke header `x-amz-trailer` permintaan. Misalnya, jika permintaan berisi `x-amz-trailer: x-amz-checksum-crc32` dan potongan trailer memiliki nama header`x-amz-checksum-sha1`, permintaan gagal. Bidang nilai dalam potongan trailer mencakup pengkodean base64 dari nilai checksum endian besar untuk objek tersebut. (Pengurutan big-endian menyimpan byte data paling signifikan pada alamat memori terendah, dan byte paling tidak signifikan pada alamat memori terbesar). Algoritma yang digunakan untuk menghitung checksum ini sama dengan akhiran untuk nama header (misalnya,`crc32`). 

##### Format potongan trailer
<a name="trailing-checksums-trailer-chunk-format"></a>

Potongan trailer menggunakan format berikut untuk permintaan muatan yang tidak ditandatangani:

```
x-amz-checksum-lowercase-checksum-algorithm-name:base64-checksum-value\n\r\n\r\n
```

Untuk permintaan dengan [muatan yang ditandatangani SiGv4](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-streaming-trailers.html), potongan trailer menyertakan tanda tangan trailer setelah potongan trailer. 

```
trailer-checksum\n\r\n
trailer-signature\r\n
```

Anda juga dapat menambahkan CRLF langsung ke akhir nilai checksum base64. Contoh:

```
x-amz-checksum-lowercase-checksum-algorithm-name:base64-checksum-value\r\n\r\n
```

#### Contoh: Unggahan yang dipotong dengan checksum tambahan
<a name="example-chunked-uploads-trailing"></a>

Amazon S3 mendukung unggahan terpotong yang menggunakan pengkodean `aws-chunked` konten untuk `PutObject` dan permintaan dengan checksum tambahan. `UploadPart`

**Example 1 — `PutObject` Permintaan potongan yang tidak ditandatangani dengan checksum CRC-32 tertinggal**  

 Berikut ini adalah contoh `PutObject` permintaan chunked dengan checksum CRC-32 tertinggal. Dalam contoh ini, klien mengunggah objek 17 KB dalam tiga potongan yang tidak ditandatangani dan menambahkan potongan checksum CRC-32 tertinggal dengan menggunakan header. `x-amz-checksum-crc32`

```
PUT /Key+ HTTP/1.1
Host: amzn-s3-demo-bucket
Content-Encoding: aws-chunked
x-amz-decoded-content-length: 17408
x-amz-content-sha256: STREAMING-UNSIGNED-PAYLOAD-TRAILER
x-amz-trailer: x-amz-checksum-crc32

2000\r\n                                   // Object body chunk 1 (8192 bytes)
object-bytes\r\n
2000\r\n                                   // Object body chunk 2 (8192 bytes)
object-bytes\r\n
400\r\n                                    // Object body chunk 3 (1024 bytes)
object-bytes\r\n
0\r\n                                      // Completion chunk
x-amz-checksum-crc32:YABb/g==\n\r\n\r\n    // Trailer chunk (note optional \n character)
\r\n                                         // CRLF
```

Berikut adalah contoh respon:

```
HTTP/1.1 200
ETag: ETag
x-amz-checksum-crc32: YABb/g==
```

**catatan**  
 Penggunaan linefeed `\n` di akhir nilai checksum dapat bervariasi antar klien.

**Example 2 - `PutObject` Permintaan potongan yang ditandatangani SIGV4 dengan checksum CRC-32 () tertinggal `CRC32`**  

Berikut ini adalah contoh `PutObject` permintaan chunked dengan checksum CRC-32 tertinggal. Permintaan ini menggunakan penandatanganan payload SiGv4. Dalam contoh ini, klien mengunggah objek 17 KB dalam tiga potongan yang ditandatangani. Selain `object body` potongan, `completion chunk` dan `trailer chunk` juga ditandatangani. 

```
PUT /Key+ HTTP/1.1
Host: amzn-s3-demo-bucket.s3.amazonaws.com
Content-Encoding: aws-chunked
x-amz-decoded-content-length: 17408
x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER
x-amz-trailer: x-amz-checksum-crc32
		
authorization-code                            // SigV4 headers authorization

2000;chunk-signature=signature-value...\r\n   // Object body chunk 1 (8192 bytes)
object-bytes\r\n
2000;chunk-signature\r\n                      // Object body chunk 2 (8192 bytes)
object-bytes\r\n
400;chunk-signature\r\n                       // Object body chunk 3 (1024 bytes)
object-bytes\r\n
0;chunk-signature\r\n                         // Completion chunk
x-amz-checksum-crc32:YABb/g==\n\r\n            // Trailer chunk (note optional \n character)
trailer-signature\r\n
\r\n                                           // CRLF
```

Berikut adalah contoh respon:

```
HTTP/1.1 200
ETag: ETag
x-amz-checksum-crc32: YABb/g==
```

# Memeriksa integritas objek untuk data saat istirahat di Amazon S3
<a name="checking-object-integrity-at-rest"></a>

Jika Anda perlu memverifikasi konten kumpulan data yang disimpan di Amazon S3, operasi checksum [Komputasi Operasi Batch S3 menghitung](https://docs.aws.amazon.com//AmazonS3/latest/userguide/batch-ops-compute-checksums.html) checksum objek atau komposit lengkap untuk objek yang diam. Operasi **checksum Compute** menggunakan Operasi Batch untuk menghitung nilai checksum secara asinkron untuk sekelompok objek dan secara otomatis menghasilkan laporan integritas terkonsolidasi, tanpa membuat salinan baru data Anda, atau memulihkan atau mengunduh data apa pun.

Dengan operasi **checksum Compute**, Anda dapat memverifikasi miliaran objek secara efisien dengan satu permintaan pekerjaan. Untuk setiap permintaan pekerjaan **checksum Compute**, S3 menghitung nilai checksum, dan menyertakannya dalam laporan integritas yang dibuat secara otomatis (juga dikenal sebagai laporan penyelesaian). Anda kemudian dapat menggunakan laporan penyelesaian untuk memvalidasi integritas kumpulan data Anda.

Operasi **checksum Compute** bekerja dengan objek apa pun yang disimpan di S3, terlepas dari kelas penyimpanan atau ukuran objek. Baik Anda perlu memverifikasi objek sebagai praktik terbaik pelestarian data, atau memenuhi persyaratan kepatuhan, operasi **checksum Compute** mengurangi biaya, waktu, dan upaya yang diperlukan untuk validasi data dengan melakukan perhitungan checksum saat istirahat. [Untuk informasi tentang harga **checksum komputasi**, lihat tab **Manajemen dan wawasan** pada harga Amazon S3.](https://aws.amazon.com/s3/pricing/)

Kemudian, Anda dapat menggunakan output dari laporan penyelesaian yang dihasilkan untuk membandingkan dengan nilai checksum yang telah Anda simpan dalam database Anda untuk memverifikasi bahwa kumpulan data Anda tetap utuh dari waktu ke waktu. Pendekatan ini membantu Anda menjaga integritas end-to-end data untuk kebutuhan bisnis dan kepatuhan. Misalnya, Anda dapat menggunakan operasi **checksum Compute** untuk mengirimkan daftar objek yang disimpan di kelas penyimpanan S3 Glacier untuk audit keamanan tahunan. Selain itu, berbagai algoritma checksum yang didukung memungkinkan Anda untuk mempertahankan kontinuitas dengan algoritma yang digunakan dalam aplikasi Anda.

## Menggunakan algoritma checksum yang didukung
<a name="using-additional-checksums-rest"></a>

Untuk data saat istirahat, Anda dapat menghitung checksum, menggunakan salah satu algoritma checksum yang didukung:
+ CRC-64/NVME (`CRC64NVME`): Mendukung jenis checksum objek penuh saja.
+ CRC-32 (`CRC32`): Mendukung objek penuh dan jenis checksum komposit.
+ CRC-32C (`CRC32C`): Mendukung objek penuh dan jenis checksum komposit.
+ SHA-1 (`SHA1`): Mendukung objek penuh dan jenis checksum komposit.
+ SHA-256 (`SHA256`): Mendukung objek penuh dan jenis checksum komposit.
+ MD5 (`MD5`): Mendukung objek penuh dan jenis checksum komposit.

## Menggunakan **checksum Compute**
<a name="Compute-checksums"></a>

Untuk objek yang disimpan di Amazon S3, Anda dapat menggunakan operasi **checksum Compute** dengan Operasi Batch S3 untuk memeriksa konten data yang disimpan saat istirahat. Anda dapat [membuat tugas Operasi Compute checksum Batch](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-create-job.html) menggunakan konsol Amazon S3, AWS Command Line Interface (AWS CLI), REST API, atau AWS SDK. Saat pekerjaan **checksum Compute** selesai, Anda akan menerima laporan penyelesaian. Untuk informasi selengkapnya tentang cara menggunakan laporan penyelesaian, lihat [Melacak status pekerjaan dan laporan penyelesaian](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-job-status.html).

Sebelum membuat tugas **checksum Compute**, Anda harus membuat peran AWS Identity and Access Management Operasi Batch S3 (IAM) untuk memberikan izin Amazon S3 untuk melakukan tindakan atas nama Anda. Anda harus memberikan izin untuk membaca file manifes dan menulis laporan penyelesaian ke bucket S3. Untuk informasi selengkapnya, lihat [Hitung checksum](batch-ops-compute-checksums.md).

### Menggunakan konsol S3
<a name="Compute-checksum-console"></a>

**Untuk menggunakan operasi **checksum Compute****

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Di bilah navigasi di bagian atas halaman, pilih nama yang saat ini ditampilkan Wilayah AWS. Selanjutnya, pilih Wilayah tempat Anda ingin membuat pekerjaan Anda.
**catatan**  
Untuk operasi penyalinan, Anda harus membuat pekerjaan di Wilayah yang sama dengan bucket tujuan. Untuk semua operasi lainnya, Anda harus membuat pekerjaan di Wilayah yang sama dengan objek dalam manifes.

1. Pilih **Operasi Batch** di panel navigasi kiri konsol Amazon S3.

1. Pilih **Buat tugas**.

1. Lihat di Wilayah AWS mana Anda ingin membuat pekerjaan Anda.
**catatan**  
Untuk operasi penyalinan, Anda harus membuat pekerjaan di Wilayah yang sama dengan bucket tujuan. Untuk semua operasi lainnya, Anda harus membuat pekerjaan di Wilayah yang sama dengan objek dalam manifes.

1. Pada **Format manifes**, pilih jenis objek manifes yang akan digunakan.
   + Jika Anda memilih **laporan inventaris S3 (manifest.json)**, masukkan jalur ke `manifest.json` objek, dan (opsional) **ID versi objek Manifest jika Anda ingin menggunakan versi objek** tertentu. Atau, Anda dapat memilih **Browse S3** dan memilih file manifes JSON, yang secara otomatis mengisi semua entri bidang objek manifes.
   + Jika Anda memilih **CSV**, pilih Jenis lokasi manifes, Kemudian, masukkan jalur ke objek manifes berformat CSV atau pilih **Browse S3** untuk memilih objek manifes. Objek manifes harus mengikuti format yang dijelaskan di konsol. Jika Anda ingin menggunakan versi tertentu dari objek manifes, maka Anda juga dapat menentukan ID versi objek.
   + Jika Anda memilih **Buat manifes menggunakan konfigurasi Replikasi S3**, daftar objek akan dihasilkan menggunakan konfigurasi replikasi dan secara opsional disimpan ke tujuan yang Anda pilih. Saat menggunakan konfigurasi replikasi untuk menghasilkan manifes, satu-satunya operasi yang akan tersedia adalah **Replikasi**.

1. Pilih **Berikutnya**.

1. Di bawah **Operasi**, pilih operasi **checksum Compute** untuk menghitung checksum pada semua objek yang tercantum dalam manifes. Pilih **jenis Checksum** dan **fungsi Checksum** untuk pekerjaan Anda. Lalu, pilih **Selanjutnya**.

1. Isi informasi untuk **Konfigurasi opsi tambahan**, lalu pilih **Berikutnya**.

1. Pada halaman **Konfigurasi opsi tambahan**, isi informasi untuk pekerjaan **checksum Compute** Anda.
**catatan**  
Di bawah **laporan Penyelesaian**, pastikan untuk mengkonfirmasi pernyataan pengakuan. Pernyataan pengakuan ini mengonfirmasi bahwa Anda memahami bahwa laporan penyelesaian berisi nilai checksum, yang digunakan untuk memverifikasi integritas data yang disimpan di Amazon S3. Oleh karena itu, laporan penyelesaian harus dibagikan dengan hati-hati. Selain itu, perhatikan bahwa jika Anda membuat permintaan checksum Compute dan menentukan lokasi bucket pemilik akun eksternal untuk menyimpan laporan penyelesaian, pastikan untuk menentukan Akun AWS ID pemilik bucket eksternal.

1. Pilih **Berikutnya**.

1. Pada halaman **Ulasan**, tinjau dan konfirmasikan pengaturan Anda.

1. (Opsional) Jika Anda perlu membuat perubahan, pilih **Sebelumnya** untuk kembali ke halaman sebelumnya, atau pilih **Edit** untuk memperbarui langkah tertentu.

1. Setelah mengonfirmasi perubahan, pilih **Buat pekerjaan**.

**Untuk membuat daftar dan memantau kemajuan semua permintaan **checksum Compute****

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon S3 di. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Di panel navigasi kiri, pilih **Operasi Batch**.

1. Pada halaman **Operasi Batch**, Anda dapat meninjau detail pekerjaan seperti prioritas pekerjaan, tingkat penyelesaian pekerjaan, dan total objek.

1. Jika Anda ingin mengelola atau mengkloning pekerjaan **checksum Compute** tertentu, klik **ID Job untuk meninjau informasi pekerjaan** tambahan.

1. Pada halaman pekerjaan **Compute checksum** tertentu, tinjau detail pekerjaan.

Setiap pekerjaan operasi batch berlangsung melalui [status pekerjaan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-job-status.html#batch-ops-job-status-table) yang berbeda. Anda juga dapat [mengaktifkan AWS CloudTrail acara](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-cloudtrail-logging-for-s3.html) di konsol S3 untuk menerima peringatan tentang perubahan status pekerjaan apa pun. Untuk pekerjaan aktif, Anda dapat meninjau pekerjaan yang sedang berjalan dan tingkat penyelesaian di halaman **Detail pekerjaan**.

### Menggunakan AWS SDKs
<a name="Compute-checksum-sdk"></a>

------
#### [ Java ]

**Example Contoh: Membuat pekerjaan **checksum Compute****  
Contoh berikut menunjukkan cara membuat pekerjaan **checksum Compute** (sebagai bagian dari permintaan **Create job**), dan cara menentukan manifes:  

```
// Required parameters
String accountId = "111122223333";
String roleArn = "arn:aws:iam::111122223333:role/BatchOperations";
String manifestArn = "arn:aws:s3:::my_manifests/manifest.csv";
String manifestEtag = "60e460c9d1046e73f7dde5043ac3ae85";
String reportBucketArn = "arn:aws:s3:::amzn-s3-demo-completion-report-bucket";
String reportExpectedBucketOwner = "111122223333";
String reportPrefix = "demo-report";

// Job Operation
S3ComputeObjectChecksumOperation s3ComputeObjectChecksum = S3ComputeObjectChecksumOperation.builder()
    .checksumAlgorithm(ComputeObjectChecksumAlgorithm.CRC64)
    .checksumType(ComputeObjectChecksumType.COMPOSITE)
    .build();

JobOperation operation = JobOperation.builder()
    .s3ComputeObjectChecksum(s3ComputeObjectChecksum)
    .build();

// Job Manifest
JobManifestLocation location = JobManifestLocation.builder()
    .eTag(manifestEtag)
    .objectArn(manifestArn)
    .build();

JobManifestSpec spec = JobManifestSpec.builder()
    .format(JobManifestFormat.S3_BATCH_OPERATIONS_CSV_20180820)
    .fields(Arrays.asList(JobManifestFieldName.BUCKET, JobManifestFieldName.KEY))
    .build();

JobManifest manifest = JobManifest.builder()
    .location(location)
    .spec(spec)
    .build();

// Completion Report
JobReport report = JobReport.builder()
    .bucket(reportBucketArn)
    .enabled(true) // Must be true
    .expectedBucketOwner(reportExpectedBucketOwner)
    .format(JobReportFormat.REPORT_CSV_20180820)
    .prefix(reportPrefix)
    .reportScope(JobReportScope.ALL_TASKS)
    .build();

// Create Job Request
CreateJobRequest request = CreateJobRequest.builder()
    .accountId(accountId)
    .confirmationRequired(false)
    .manifest(manifest)
    .operation(operation)
    .priority(10)
    .report(report)
    .roleArn(roleArn);

// Create the client
S3ControlClient client = S3ControlClient.builder()
    .credentialsProvider(new ProfileCredentialsProvider())
    .region(Region.US_EAST_1)
    .build();

// Send the request
try {
    CreateJobResponse response = client.createJob(request);
    System.out.println(response);    
} catch (AwsServiceException e) {
    System.out.println("AwsServiceException: " + e.getMessage());
    throw new RuntimeException(e);
} catch (SdkClientException e) {
    System.out.println("SdkClientException: " + e.getMessage());
    throw new RuntimeException(e);
}
```

**Example Contoh: Melihat detail **pekerjaan Compute checksum****  
Contoh berikut menunjukkan bagaimana Anda dapat menentukan ID pekerjaan untuk melihat detail pekerjaan (seperti tingkat penyelesaian pekerjaan) untuk permintaan pekerjaan **checksum Compute**:  

```
DescribeJobRequest request = DescribeJobRequest.builder()
        .accountId("1234567890")
        .jobId("a16217a1-e082-48e5-b04f-31fac3a66b13")
        .build();
```

------

### Menggunakan AWS CLI
<a name="Compute-checksum-cli"></a>

Anda dapat menggunakan [https://docs.aws.amazon.com/cli/latest/reference/s3control/create-job.html](https://docs.aws.amazon.com/cli/latest/reference/s3control/create-job.html)perintah untuk membuat pekerjaan operasi batch baru, dan untuk memberikan daftar objek. Kemudian, tentukan algoritma checksum dan jenis checksum, dan bucket tujuan tempat Anda ingin menyimpan laporan checksum **Compute**. Contoh berikut membuat pekerjaan **checksum Komputasi** Operasi Batch S3 dengan menggunakan manifes yang dihasilkan S3 untuk. Akun AWS *111122223333*

Untuk menggunakan perintah ini, ganti *user input placeholders* dengan informasi Anda sendiri:

```
aws s3control create-job \
    --account-id 111122223333 \
    --manifest '{"Spec":{"Format":"S3BatchOperations_CSV_20180820","Fields":["Bucket","Key"]},"Location":{"ObjectArn":"arn:aws:s3:::my-manifest-bucket/manifest.csv","ETag":"e0e8bfc50e0f0c5d5a1a5f0e0e8bfc50"}}' \
    --manifest-generator '{
        "S3JobManifestGenerator": {
          "ExpectedBucketOwner": "111122223333",
          "SourceBucket": "arn:aws:s3:::amzn-s3-demo-source-bucket",
          "EnableManifestOutput": true,
          "ManifestOutputLocation": {
            "ExpectedManifestBucketOwner": "111122223333",
            "Bucket": "arn:aws:s3:::amzn-s3-demo-manifest-bucket",
            "ManifestPrefix": "prefix",
            "ManifestFormat": "S3InventoryReport_CSV_20211130"
          },
          "Filter": {
            "CreatedAfter": "2023-09-01",
            "CreatedBefore": "2023-10-01",
            "KeyNameConstraint": {
              "MatchAnyPrefix": [
                "prefix"
              ],
              "MatchAnySuffix": [
                "suffix"
              ]
            },
            "ObjectSizeGreaterThanBytes": 100,
            "ObjectSizeLessThanBytes": 200,
            "MatchAnyStorageClass": [
              "STANDARD",
              "STANDARD_IA"
            ]
          }
        }
      }' \
    --operation '{"S3ComputeObjectChecksum":{"ChecksumAlgorithm":"CRC64NVME","ChecksumType":"FULL_OBJECT"}}' \
    --report '{"Bucket":"arn:aws:s3:::my-report-bucket","Format":"Report_CSV_20180820","Enabled":true,"Prefix":"batch-op-reports/","ReportScope":"AllTasks","ExpectedBucketOwner":"111122223333"}' \
    --priority 10 \
    --role-arn arn:aws:iam::123456789012:role/S3BatchJobRole \
    --client-request-token 6e023a7e-4820-4654-8c81-7247361aeb73 \
    --description "Compute object checksums" \
    --region us-west-2
```

Setelah mengirimkan tugas **checksum Compute**, Anda menerima ID pekerjaan sebagai respons dan akan muncul di halaman daftar Operasi Batch S3. Amazon S3 memproses daftar objek dan menghitung checksum untuk setiap objek. Setelah pekerjaan selesai, S3 menyediakan laporan **checksum Compute** konsolidasi di tujuan yang ditentukan.

Untuk memantau kemajuan pekerjaan **checksum Compute** Anda, gunakan perintah. [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3control/describe-job.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3control/describe-job.html) Perintah ini memeriksa status pekerjaan operasi batch yang ditentukan. Untuk menggunakan perintah ini, ganti *user input placeholders* dengan informasi Anda sendiri.

Contoh:

```
aws s3control describe-job --account-id 111122223333 --job-id 1234567890abcdef0
```

Untuk [mendapatkan daftar](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-list-jobs.html) semua pekerjaan operasi batch **Aktif** dan **Lengkap**, lihat [Daftar pekerjaan atau daftar pekerjaan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-list-jobs.html) [di Referensi AWS CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3control/list-jobs.html) *Perintah*.

### Penggunaan API REST
<a name="Compute-checksum-api"></a>

Anda dapat mengirim permintaan REST untuk memverifikasi integritas objek dengan **checksum Compute menggunakan**. [CreateJob](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateJob.html) Anda dapat memantau kemajuan permintaan **checksum Compute** dengan mengirimkan permintaan REST ke operasi [DescribeJob](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html)API. Setiap pekerjaan operasi batch berlangsung melalui status berikut:
+ **BARU**
+ **MEMPERSIAPKAN**
+ **SIAP**
+ **AKTIF**
+ **BERHENTI**
+ **DIJEDA**
+ **LENGKAP**
+ **MEMBATALKAN**
+ **GAGAL**

Respons API memberi tahu Anda tentang status pekerjaan saat ini.