

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.

# AWS Encryption SDK für Rust
<a name="rust"></a>

In diesem Thema wird erklärt, wie Sie AWS Encryption SDK for Rust installieren und verwenden. Einzelheiten zur Programmierung mit dem AWS Encryption SDK für Rust finden Sie im [Rust-Verzeichnis](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/) des aws-encryption-sdk Repositorys unter GitHub.

The AWS Encryption SDK for Rust unterscheidet sich von einigen anderen Programmiersprachenimplementierungen AWS Encryption SDK in folgenden Punkten:
+ Keine Unterstützung für das [Zwischenspeichern von Datenschlüsseln](data-key-caching.md). Der AWS Encryption SDK für Rust unterstützt jedoch den [AWS KMS hierarchischen Schlüsselbund](use-hierarchical-keyring.md), eine alternative Lösung zum Zwischenspeichern kryptografischer Materialien.
+ Keine Unterstützung für Streaming-Daten

The AWS Encryption SDK for Rust enthält alle Sicherheitsfunktionen, die in den Versionen 2.0 eingeführt wurden. *x* und höher von anderen Sprachimplementierungen von. AWS Encryption SDK Wenn Sie jedoch AWS Encryption SDK for Rust verwenden, um Daten zu entschlüsseln, die mit einer Version vor 2.0 verschlüsselt wurden. *x-Version* einer anderen Sprachimplementierung von AWS Encryption SDK, möglicherweise müssen Sie Ihre [Commitment-Richtlinie](concepts.md#commitment-policy) anpassen. Details hierzu finden Sie unter [Wie legen Sie Ihre Verpflichtungsrichtlinie fest](migrate-commitment-policy.md#migrate-commitment-step1).

Die AWS Encryption SDK for Rust ist ein Produkt von AWS Encryption SDK In [Dafny](https://github.com/dafny-lang/dafny/blob/master/README.md), einer formalen Bestätigungssprache, in der Sie Spezifikationen, den Code zu ihrer Implementierung und die Beweise, um sie zu testen, schreiben. Das Ergebnis ist eine Bibliothek, die die Funktionen von AWS Encryption SDK in einem Framework implementiert, das die funktionale Korrektheit gewährleistet.

**Weitere Informationen**
+ Beispiele für die Konfiguration von Optionen in der AWS Encryption SDK, z. B. die Angabe einer alternativen Algorithmussuite, die Beschränkung verschlüsselter Datenschlüssel und die Verwendung von Schlüsseln für AWS KMS mehrere Regionen, finden Sie unter. [Konfiguration der AWS Encryption SDK](configure.md)
+ Beispiele zur Konfiguration und Verwendung von AWS Encryption SDK for Rust finden Sie in den [Rust-Beispielen](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/examples) im aws-encryption-sdk Repository unter GitHub.

**Topics**
+ [Voraussetzungen](#prerequisites-rust)
+ [Installation](#rust-installation)
+ [Beispiele](rust-examples.md)

## Voraussetzungen
<a name="prerequisites-rust"></a>

Stellen Sie vor der Installation von AWS Encryption SDK for Rust sicher, dass Sie die folgenden Voraussetzungen erfüllen.

**Installieren Sie Rust und Cargo**  
Installieren Sie die aktuelle stabile Version von [Rust](https://www.rust-lang.org/) mit [Rustup](https://rustup.rs/).  
Weitere Informationen zum Herunterladen und Installieren von Rustup finden Sie in den [Installationsverfahren in The Cargo Book](https://doc.rust-lang.org/cargo/getting-started/installation.html).

## Installation
<a name="rust-installation"></a>

The AWS Encryption SDK for Rust ist als Kiste auf [https://crates.io/crates/aws-esdk](https://crates.io/crates/aws-esdk)Crates.io erhältlich. Einzelheiten zur Installation und Erstellung von AWS Encryption SDK for Rust finden Sie in der [README.md im Repository](https://github.com/aws/aws-encryption-sdk/tree/mainline) unter. aws-encryption-sdk GitHub

Sie können das AWS Encryption SDK für Rust auf folgende Weise installieren.

**manuell**  
Um das AWS Encryption SDK für Rust zu installieren, klonen oder laden Sie das [aws-encryption-sdk](https://github.com/aws/aws-encryption-sdk/tree/mainline) GitHub Repository herunter.

**Verwenden von Crates.io**  
Führen Sie den folgenden Cargo-Befehl in Ihrem Projektverzeichnis aus:  

```
cargo add aws-esdk
```
Oder fügen Sie Ihrer Cargo.toml die folgende Zeile hinzu:  

```
aws-esdk = "<version>"
```

# AWS Encryption SDK für Rust-Beispielcode
<a name="rust-examples"></a>

Die folgenden Beispiele zeigen die grundlegenden Codierungsmuster, die Sie beim Programmieren mit dem AWS Encryption SDK für Rust verwenden. Insbesondere instanziieren Sie die Bibliothek AWS Encryption SDK und die Material Provider-Bibliothek. Bevor Sie die einzelnen Methoden aufrufen, instanziieren Sie dann das Objekt, das die Eingabe für die Methode definiert.

Beispiele für die Konfiguration von Optionen in der AWS Encryption SDK, wie z. B. die Angabe einer alternativen Algorithmus-Suite und die Beschränkung verschlüsselter Datenschlüssel, finden Sie in den [Rust-Beispielen](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/examples/) im aws-encryption-sdk Repository unter. GitHub

## Verschlüsseln und Entschlüsseln von Daten in der AWS Encryption SDK für Rust
<a name="rust-example-encrypt"></a>

Dieses Beispiel zeigt das grundlegende Muster für das Verschlüsseln und Entschlüsseln von Daten. Es verschlüsselt eine kleine Datei mit Datenschlüsseln, die durch einen AWS KMS Wrapping-Schlüssel geschützt sind.

**Schritt 1: Instanziieren Sie die. AWS Encryption SDK**  
Sie verwenden die Methoden in, AWS Encryption SDK um Daten zu verschlüsseln und zu entschlüsseln.  

```
let esdk_config = AwsEncryptionSdkConfig::builder().build()?;
let esdk_client = esdk_client::Client::from_conf(esdk_config)?;
```

**Schritt 2: Erstellen Sie einen AWS KMS Client.**  

```
let sdk_config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await;
let kms_client = aws_sdk_kms::Client::new(&sdk_config);
```

**Optional: Erstellen Sie Ihren Verschlüsselungskontext.**  

```
let encryption_context = HashMap::from([
    ("encryption".to_string(), "context".to_string()),
    ("is not".to_string(), "secret".to_string()),
    ("but adds".to_string(), "useful metadata".to_string()),
    ("that can help you".to_string(), "be confident that".to_string()),
    ("the data you are handling".to_string(), "is what you think it is".to_string()),
]);
```

**Schritt 3: Instanziieren Sie die Material Provider-Bibliothek.**  
Sie verwenden die Methoden in der Material Provider-Bibliothek, um die Schlüsselbunde zu erstellen, die angeben, welche Schlüssel Ihre Daten schützen.  

```
let mpl_config = MaterialProvidersConfig::builder().build()?;
let mpl = mpl_client::Client::from_conf(mpl_config)?;
```

**Schritt 4: Erstellen Sie einen AWS KMS Schlüsselbund.**  
Um den Schlüsselbund zu erstellen, rufen Sie die Schlüsselbundmethode mit dem Schlüsselbund-Eingabeobjekt auf. In diesem Beispiel wird die `create_aws_kms_keyring()` Methode verwendet und ein KMS-Schlüssel angegeben.  

```
let kms_keyring = mpl
    .create_aws_kms_keyring()
    .kms_key_id(kms_key_id)
    .kms_client(kms_client)
    .send()
    .await?;
```

**Schritt 5: Verschlüsseln Sie den Klartext.**  

```
let plaintext = example_data.as_bytes();

let encryption_response = esdk_client.encrypt()
    .plaintext(plaintext)
    .keyring(kms_keyring.clone())
    .encryption_context(encryption_context.clone())
    .send()
    .await?;

let ciphertext = encryption_response
                    .ciphertext
                    .expect("Unable to unwrap ciphertext from encryption response");
```

**Schritt 6: Entschlüsseln Sie Ihre verschlüsselten Daten mit demselben Schlüsselbund, den Sie beim Verschlüsseln verwendet haben.**  

```
let decryption_response = esdk_client.decrypt()
    .ciphertext(ciphertext)
    .keyring(kms_keyring)
    // Provide the encryption context that was supplied to the encrypt method
    .encryption_context(encryption_context)
    .send()
    .await?;

let decrypted_plaintext = decryption_response
                            .plaintext
                            .expect("Unable to unwrap plaintext from decryption response");
```