

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Schutz der Datenintegrität mit Prüfsummen
<a name="s3-checksums"></a>

Amazon Simple Storage Service (Amazon S3) bietet die Möglichkeit, beim Hochladen eines Objekts eine Prüfsumme anzugeben. Wenn Sie eine Prüfsumme angeben, wird diese zusammen mit dem Objekt gespeichert und kann beim Herunterladen des Objekts überprüft werden.

Prüfsummen bieten eine zusätzliche Ebene der Datenintegrität bei der Übertragung von Dateien. Mit Prüfsummen können Sie die Datenkonsistenz überprüfen, indem Sie sicherstellen, dass die empfangene Datei mit der Originaldatei übereinstimmt. Weitere Informationen zu Prüfsummen mit Amazon S3 finden Sie im [Amazon Simple Storage Service-Benutzerhandbuch](https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html), einschließlich der [unterstützten Algorithmen](https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#using-additional-checksums).

Sie haben die Flexibilität, den Algorithmus auszuwählen, der Ihren Anforderungen am besten entspricht, und das SDK die Prüfsumme berechnen zu lassen. Alternativ können Sie mithilfe eines der unterstützten Algorithmen einen vorab berechneten Prüfsummenwert angeben. 

**Anmerkung**  
 Ab Version 1.4.0 von bietet das SDK standardmäßige Integritätsschutzmaßnahmen AWS SDK für Kotlin, indem es automatisch eine Prüfsumme für Uploads berechnet. `CRC32` Das SDK berechnet diese Prüfsumme, wenn Sie keinen vorab berechneten Prüfsummenwert angeben oder wenn Sie keinen Algorithmus angeben, den das SDK zur Berechnung einer Prüfsumme verwenden soll.   
[Das SDK bietet auch globale Einstellungen für den Schutz der Datenintegrität, die Sie extern festlegen können. Weitere Informationen finden Sie im Referenzhandbuch und im Tools-Referenzhandbuch.AWS SDKs ](https://docs.aws.amazon.com/sdkref/latest/guide/feature-dataintegrity.html)

Wir behandeln Prüfsummen in zwei Anforderungsphasen: beim Hochladen eines Objekts und beim Herunterladen eines Objekts. 

## Hochladen eines Objekts
<a name="use-service-S3-checksum-upload"></a>

 Sie laden Objekte mit dem SDK für Kotlin auf Amazon S3 hoch, indem Sie die [https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3/put-object.html](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/s3/aws.sdk.kotlin.services.s3/put-object.html)Funktion mit einem Anforderungsparameter verwenden. Der Anforderungsdatentyp bietet die `checksumAlgorithm` Eigenschaft, die Prüfsummenberechnung zu ermöglichen. 

Der folgende Codeausschnitt zeigt eine Anfrage zum Hochladen eines Objekts mit einer Prüfsumme. `CRC32` Wenn das SDK die Anfrage sendet, berechnet es die `CRC32` Prüfsumme und lädt das Objekt hoch. Amazon S3 speichert die Prüfsumme mit dem Objekt.

```
val request = PutObjectRequest {
    bucket = "{{amzn-s3-demo-bucket}}"
    key = "{{key}}"
    checksumAlgorithm = ChecksumAlgorithm.CRC32
}
```

Wenn Sie mit der Anfrage keinen Prüfsummenalgorithmus angeben, variiert das Prüfsummenverhalten je nach der Version des verwendeten SDK, wie in der folgenden Tabelle dargestellt.

**Prüfsummenverhalten, wenn kein Prüfsummenalgorithmus bereitgestellt wird**


| Kotlin SDK-Version | Verhalten der Prüfsumme | 
| --- | --- | 
| früher als 1.4.0 | Das SDK berechnet nicht automatisch eine CRC-basierte Prüfsumme und gibt sie in der Anfrage an. | 
| 1.4.0 oder höher | Das SDK verwendet den `CRC32` Algorithmus zur Berechnung der Prüfsumme und stellt sie in der Anfrage bereit. Amazon S3 validiert die Integrität der Übertragung, indem es seine eigene `CRC32` Prüfsumme berechnet und sie mit der vom SDK bereitgestellten Prüfsumme vergleicht. Wenn die Prüfsummen übereinstimmen, wird die Prüfsumme zusammen mit dem Objekt gespeichert. | 

### Verwenden Sie einen vorberechneten Prüfsummenwert
<a name="use-service-S3-checksum-upload-pre"></a>

Ein mit der Anfrage bereitgestellter vorberechneter Prüfsummenwert deaktiviert die automatische Berechnung durch das SDK und verwendet stattdessen den angegebenen Wert.

Das folgende Beispiel zeigt eine Anfrage mit einer vorberechneten Prüfsumme. SHA256

```
val request = PutObjectRequest {
    bucket = "{{amzn-s3-demo-bucket}}"
    key = "{{key}}"
    body = ByteStream.fromFile(File("file_to_upload.txt"))
    checksumAlgorithm = ChecksumAlgorithm.SHA256
    checksumSha256 = "cfb6d06da6e6f51c22ae3e549e33959dbb754db75a93665b8b579605464ce299"
}
```

Wenn Amazon S3 feststellt, dass der Prüfsummenwert für den angegebenen Algorithmus falsch ist, gibt der Service eine Fehlerantwort zurück.

### Mehrteilige Uploads
<a name="use-service-S3-checksum-upload-multi"></a>

Sie können Prüfsummen auch bei mehrteiligen Uploads verwenden.

 Sie müssen den Prüfsummenalgorithmus in der Anfrage und in jeder `CreateMultipartUpload` Anfrage angeben. `UploadPart` Als letzten Schritt müssen Sie die Prüfsumme für jeden Teil in der angeben. `CompleteMultipartUpload` Das folgende Beispiel zeigt, wie ein mehrteiliger Upload mit dem angegebenen Prüfsummenalgorithmus erstellt wird. 

```
val multipartUpload = s3.createMultipartUpload {
    bucket = "{{amzn-s3-demo-bucket}}"
    key = "{{key}}"
    checksumAlgorithm = ChecksumAlgorithm.Sha1
}

val partFilesToUpload = listOf("data-part1.csv", "data-part2.csv", "data-part3.csv")

val completedParts = partFilesToUpload
    .mapIndexed { i, fileName ->
        val uploadPartResponse = s3.uploadPart {
            bucket = "amzn-s3-demo-bucket"
            key = "key"
            body = ByteStream.fromFile(File(fileName))
            uploadId = multipartUpload.uploadId
            partNumber = i + 1 // Part numbers begin at 1.
            checksumAlgorithm = ChecksumAlgorithm.Sha1
        }

        CompletedPart {
            eTag = uploadPartResponse.eTag
            partNumber = i + 1
            checksumSha1 = uploadPartResponse.checksumSha1
        }
    }

s3.completeMultipartUpload {
    uploadId = multipartUpload.uploadId
    bucket = "{{amzn-s3-demo-bucket}}"
    key = "{{key}}"
    multipartUpload {
        parts = completedParts
    }
}
```

## Herunterladen eines Objekts
<a name="use-service-S3-checksum-download"></a>

Wenn Sie die verwenden, um ein Objekt herunterzuladen, validiert das SDK automatisch die Prüfsumme, . `ChecksumMode` `enabled` wenn die `checksumMode` Eigenschaft des Builders für auf gesetzt `GetObjectRequest` ist`ChecksumMode.Enabled`. 

Die Anfrage im folgenden Codeausschnitt weist das SDK an, die Prüfsumme in der Antwort zu validieren, indem es die Prüfsumme berechnet und die Werte vergleicht.

```
val request = GetObjectRequest {
    bucket = "{{amzn-s3-demo-bucket}}"
    key = "{{key}}"
    checksumMode = ChecksumMode.Enabled
}
```

**Anmerkung**  
Wenn das Objekt nicht mit einer Prüfsumme hochgeladen wurde, findet keine Überprüfung statt. 

Wenn Sie eine SDK-Version von 1.4.0 oder höher verwenden, überprüft das SDK automatisch die Integrität von `getObject` Anfragen, ohne der Anfrage etwas `checksumMode = ChecksumMode.Enabled` hinzuzufügen.

### Asynchrone Validierung
<a name="service-s3-checksum-getObject-kotlin-asyncValidation"></a>

Da das SDK für Kotlin Streaming-Antworten verwendet, wenn es ein Objekt von Amazon S3 herunterlädt, wird die Prüfsumme berechnet, während Sie das Objekt verwenden. Daher *müssen* Sie das Objekt verwenden, damit die Prüfsumme validiert wird.

Das folgende Beispiel zeigt, wie eine Prüfsumme validiert wird, indem die Antwort vollständig verarbeitet wird.

```
val request = GetObjectRequest {
    bucket = "{{amzn-s3-demo-bucket}}"
    key = "{{key}}"
    checksumMode = checksumMode.Enabled
}

val response = s3Client.getObject(request) {
    println(response.body?.decodeToString()) // Fully consume the object.
    // The checksum is valid.
}
```

Im Gegensatz dazu verwendet der Code im folgenden Beispiel das Objekt in keiner Weise, sodass die Prüfsumme nicht validiert wird.

```
s3Client.getObject(request) {
    println("Got the object.")
}
```

Wenn die vom SDK berechnete Prüfsumme nicht mit der erwarteten Prüfsumme übereinstimmt, die mit der Antwort gesendet wurde, gibt das SDK eine aus. `ChecksumMismatchException`