

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 Programmiersprachen
<a name="programming-languages"></a>

Das AWS Encryption SDK ist für die folgenden Programmiersprachen verfügbar. Alle Sprachimplementierungen sind interoperabel. Sie können mit einer Sprachimplementierung verschlüsseln und mit einer anderen entschlüsseln. Die Interoperabilität ist möglicherweise von Spracheinschränkungen abhängig. Wenn dies der Fall ist, werden diese Einschränkungen im Thema zur Sprachimplementierung beschrieben. Außerdem müssen Sie beim Verschlüsseln und Entschlüsseln kompatible Schlüsselbünde oder Masterschlüssel und Masterschlüsselanbieter verwenden. Details hierzu finden Sie unter [Schlüsselbund-Kompatibilität](choose-keyring.md#keyring-compatibility).

**Topics**
+ [C](c-language.md)
+ [.NET](dot-net.md)
+ [Go](go.md)
+ [Java](java.md)
+ [JavaScript](javascript.md)
+ [Python](python.md)
+ [Rust](rust.md)
+ [Befehlszeilenschnittstelle](crypto-cli.md)

# AWS-Verschlüsselungs-SDK for C
<a name="c-language"></a>

Die AWS-Verschlüsselungs-SDK for C stellt eine clientseitige Verschlüsselungsbibliothek für Entwickler bereit, die Anwendungen in C schreiben. Sie dient auch als Grundlage für Implementierungen von AWS Encryption SDK in höheren Programmiersprachen.

Wie alle Implementierungen von bietet sie erweiterte AWS Encryption SDK Datenschutzfunktionen. AWS-Verschlüsselungs-SDK for C Dazu gehören die [Envelope-Verschlüsselung](concepts.md#envelope-encryption), zusätzliche authentifizierte Daten (AAD) und [Algorithmen-Pakete](concepts.md#crypto-algorithm) mit sicherem, authentifiziertem, symmetrischem Schlüssel, wie z. B. 256-Bit-AES-GCM mit Schlüsselableitung und Signatur.

Alle sprachspezifischen Implementierungen von sind vollständig interoperabel. AWS Encryption SDK Beispielsweise können Sie Daten mit der verschlüsseln AWS-Verschlüsselungs-SDK for C und mit [jeder unterstützten Sprachimplementierung](programming-languages.md) entschlüsseln, einschließlich der [AWS Encryption](crypto-cli.md) CLI.

Das AWS-Verschlüsselungs-SDK for C erfordert die Interaktion AWS SDK für C\$1\$1 mit AWS Key Management Service ()AWS KMS. Sie müssen es nur verwenden, wenn Sie den optionalen [AWS KMS Schlüsselbund](use-kms-keyring.md) verwenden. Das erfordert AWS KMS jedoch AWS Encryption SDK keinen anderen AWS Dienst.

**Weitere Informationen**
+ Einzelheiten zur Programmierung mit dem AWS-Verschlüsselungs-SDK for C finden Sie in den [C-Beispielen](c-examples.md), den [Beispielen](https://github.com/aws/aws-encryption-sdk-c/tree/master/examples) im [aws-encryption-sdk-c Repository](https://github.com/aws/aws-encryption-sdk-c/) auf GitHub und in der [AWS-Verschlüsselungs-SDK for C API-Dokumentation](https://aws.github.io/aws-encryption-sdk-c/html/).
+ Eine Erläuterung zur Verwendung von AWS-Verschlüsselungs-SDK for C zum Verschlüsseln von Daten, sodass Sie sie in mehreren Bereichen entschlüsseln können AWS-Regionen, finden Sie unter [Wie entschlüsselt man Chiffretexte in mehreren Regionen mit dem in C AWS Encryption SDK im Sicherheitsblog](https://aws.amazon.com/blogs/security/how-to-decrypt-ciphertexts-multiple-regions-aws-encryption-sdk-in-c/). AWS 

**Topics**
+ [Installation](c-language-installation.md)
+ [Verwenden des C SDK](c-language-using.md)
+ [Beispiele](c-examples.md)

# Installation des AWS-Verschlüsselungs-SDK for C
<a name="c-language-installation"></a>

Installieren Sie die neueste Version der AWS-Verschlüsselungs-SDK for C.

**Anmerkung**  
Alle AWS-Verschlüsselungs-SDK for C Versionen vor 2.0.0 befinden sich in der [end-of-supportPhase](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle).  
Sie können sicher von Version 2.0 aus aktualisieren. *x* und höher auf die neueste Version von AWS-Verschlüsselungs-SDK for C ohne Code- oder Datenänderungen. In Version 2.0 wurden jedoch [neue Sicherheitsfunktionen](about-versions.md#version-2) eingeführt. *x* sind nicht abwärtskompatibel. Um von Versionen vor 1.7 zu aktualisieren. *x* auf Version 2.0. *x* und höher, Sie müssen zuerst auf die neueste Version 1 aktualisieren. *x-Version* von AWS-Verschlüsselungs-SDK for C. Details hierzu finden Sie unter [Migrieren Sie Ihre AWS Encryption SDK](migration.md).

Eine ausführliche Anleitung zur Installation und Erstellung von finden Sie AWS-Verschlüsselungs-SDK for C in der [README-Datei](https://github.com/aws/aws-encryption-sdk-c/#readme) des [aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/)Repositorys. Es enthält Anweisungen zum Erstellen auf Amazon Linux-, Ubuntu-, macOS- und Windows-Plattformen. 

Bevor Sie beginnen, entscheiden Sie, ob Sie [AWS KMS Schlüsselringe](use-kms-keyring.md) in der AWS Encryption SDK verwenden möchten. Wenn Sie einen AWS KMS Schlüsselbund verwenden, müssen Sie den installieren. AWS SDK für C\$1\$1 Das AWS SDK ist für die Interaktion mit [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) erforderlich. Wenn Sie AWS KMS Schlüsselringe verwenden, werden diese AWS Encryption SDK verwendet, AWS KMS um die Verschlüsselungsschlüssel zu generieren und zu schützen, die Ihre Daten schützen. 

Sie müssen den nicht installieren, AWS SDK für C\$1\$1 wenn Sie einen anderen Schlüsselbundtyp verwenden, z. B. einen RAW-AES-Schlüsselbund, einen RSA-Rohschlüsselbund oder einen Mehrfachschlüsselbund ohne Schlüsselbund. AWS KMS Wenn Sie jedoch einen unformatierten Schlüsselbund verwenden, müssen Sie Ihre eigenen Rawrap-Schlüssel generieren und schützen.

Wenn Sie Probleme mit Ihrer Installation haben, melden Sie [ein Problem](https://github.com/aws/aws-encryption-sdk-c/issues) im `aws-encryption-sdk-c` Repository oder verwenden Sie einen der Feedback-Links auf dieser Seite.

# Mit dem AWS-Verschlüsselungs-SDK for C
<a name="c-language-using"></a>

In diesem Thema werden einige der Funktionen von erläutert AWS-Verschlüsselungs-SDK for C , die in anderen Programmiersprachenimplementierungen nicht unterstützt werden. 

Die Beispiele in diesem Abschnitt zeigen, wie [Version 2.0 verwendet wird. ](about-versions.md)*x* und später von AWS-Verschlüsselungs-SDK for C. Beispiele, die frühere Versionen verwenden, finden Sie in der [Release-Liste](https://github.com/aws/aws-encryption-sdk-c/releases) des [aws-encryption-sdk-c Repository-Repositorys](https://github.com/aws/aws-encryption-sdk-c/) unter GitHub.

Einzelheiten zur Programmierung mit dem AWS-Verschlüsselungs-SDK for C finden Sie in den [C-Beispielen](c-examples.md), den [Beispielen](https://github.com/aws/aws-encryption-sdk-c/tree/master/examples) im [aws-encryption-sdk-c Repository](https://github.com/aws/aws-encryption-sdk-c/) unter GitHub und in der [AWS-Verschlüsselungs-SDK for C API-Dokumentation](https://aws.github.io/aws-encryption-sdk-c/html/).

Weitere Informationen finden Sie auch unter: [Schlüsselringe](choose-keyring.md).

**Topics**
+ [

## Muster zum Ver- und Entschlüsseln von Daten
](#c-language-using-pattern)
+ [

## Referenzzählung
](#c-language-using-release)

## Muster zum Ver- und Entschlüsseln von Daten
<a name="c-language-using-pattern"></a>

Wenn Sie den verwenden AWS-Verschlüsselungs-SDK for C, folgen Sie einem ähnlichen Muster: Erstellen Sie einen [Schlüsselbund](concepts.md#keyring), erstellen Sie ein [CMM](concepts.md#crypt-materials-manager), das den Schlüsselbund verwendet, erstellen Sie eine Sitzung, die das CMM (und den Schlüsselbund) verwendet, und verarbeiten Sie dann die Sitzung.

1. Lädt Fehlerzeichenfolgen.  
Rufen Sie die `aws_cryptosdk_load_error_strings()` Methode in Ihrem C- oder C\$1\$1-Code auf. Sie lädt Fehlerinformationen, die für das Debuggen sehr nützlich sind.  
Sie müssen es nur einmal aufrufen, z. B. in Ihrer `main` Methode.  

```
/* Load error strings for debugging */
aws_cryptosdk_load_error_strings();
```

2. Erstellen Sie einen Schlüsselbund.  
Konfigurieren Sie Ihren [Schlüsselbund](concepts.md#keyring) mit dem Umhüllungsschlüssel, den Sie verwenden möchten, um Ihre Daten zu verschlüsseln. In diesem Beispiel wird ein [AWS KMS Schlüsselbund](use-kms-keyring.md) mit einem Schlüsselbund verwendet AWS KMS key, aber Sie können stattdessen jeden beliebigen Schlüsselbund verwenden.  
Um einen AWS KMS key in einem Verschlüsselungsschlüsselbund in der zu identifizieren AWS-Verschlüsselungs-SDK for C, geben Sie einen [Schlüssel-ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) oder [Alias-ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-alias-arn) an. In einem Entschlüsselungsschlüsselbund müssen Sie einen Schlüssel-ARN verwenden. Details hierzu finden Sie unter [Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund](use-kms-keyring.md#kms-keyring-id).  

```
const char * KEY_ARN = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"    
struct aws_cryptosdk_keyring *kms_keyring = 
       Aws::Cryptosdk::KmsKeyring::Builder().Build(KEY_ARN);
```

3. Erstellen Sie eine Sitzung.  
In der verwenden Sie eine *Sitzung AWS-Verschlüsselungs-SDK for C*, um eine einzelne Klartext-Nachricht zu verschlüsseln oder eine einzelne Chiffretext-Nachricht zu entschlüsseln, unabhängig von ihrer Größe. Die Sitzung behält den Status der Nachricht während der Verarbeitung.   
Konfigurieren Sie Ihre Sitzung mit einem Allocator, einem Schlüsselbund und einem Modus: `AWS_CRYPTOSDK_ENCRYPT` oder `AWS_CRYPTOSDK_DECRYPT`. Wenn Sie den Modus der Sitzung ändern müssen, verwenden Sie die `aws_cryptosdk_session_reset`-Methode.  
Wenn Sie eine Sitzung mit einem Schlüsselbund erstellen, erstellt der AWS-Verschlüsselungs-SDK for C automatisch einen standardmäßigen Cryptographic Materials Manager (CMM) für Sie. Sie müssen dieses Objekt nicht erstellen, pflegen oder zerstören.   
Beispiel: Die folgende Sitzung verwendet den Allocator und den Schlüsselbund, der in Schritt 1 definiert wurde. Wenn Sie Daten verschlüsseln, lautet der Modus `AWS_CRYPTOSDK_ENCRYPT`.  

```
struct aws_cryptosdk_session * session = aws_cryptosdk_session_new_from_keyring_2(allocator, AWS_CRYPTOSDK_ENCRYPT, kms_keyring);
```

4. Verschlüsseln oder entschlüsseln Sie die Daten.  
Um die Daten in der Sitzung zu verarbeiten, verwenden Sie die `aws_cryptosdk_session_process`-Methode. Wenn der Eingabepuffer groß genug ist, um den gesamten Klartext aufzunehmen, und der Ausgabepuffer groß genug ist, um den gesamten Chiffretext aufzunehmen, können Sie aufrufen. `aws_cryptosdk_session_process_full` Wenn Sie jedoch Streaming-Daten verarbeiten müssen, können Sie `aws_cryptosdk_session_process` in einer Schleife aufrufen. Ein Beispiel finden Sie im Beispiel [file\$1streaming.cpp](https://github.com/aws/aws-encryption-sdk-c/blob/master/examples/file_streaming.cpp). Das `aws_cryptosdk_session_process_full` ist in den AWS Encryption SDK Versionen 1.9 eingeführt. *x* und 2.2. *x.*  
Wenn die Sitzung für das Verschlüsseln von Daten konfiguriert ist, beschreiben die Klartextfelder die Eingabe und die Verschlüsselungstext-Felder die Ausgabe. Das `plaintext`-Feld enthält die Nachricht, die Sie verschlüsseln möchten, und das `ciphertext`-Feld ruft die [verschlüsselte Nachricht](message-format.md) ab, die die Verschlüsselungsmethode zurückgibt.   

```
/* Encrypting data */
aws_cryptosdk_session_process_full(session,
                                   ciphertext,
                                   ciphertext_buffer_size,
                                   &ciphertext_length,
                                   plaintext,
                                   plaintext_length)
```
Wenn die Sitzung für das Entschlüsseln von Daten konfiguriert ist, beschreiben die Verschlüsselungstext-Felder die Eingabe und die Klartextfelder die Ausgabe. Das `ciphertext`-Feld enthält die [verschlüsselte Nachricht](message-format.md), die die Verschlüsselungsmethode zurückgegeben hat, und das `plaintext`-Feld ruft die Klartextnachricht ab, die die Entschlüsselungsmethode zurückgibt.  
Um die Daten zu entschlüsseln, rufen Sie die `aws_cryptosdk_session_process_full`-Methode auf.  

```
/* Decrypting data */
aws_cryptosdk_session_process_full(session,
                                   plaintext,
                                   plaintext_buffer_size,
                                   &plaintext_length,
                                   ciphertext,
                                   ciphertext_length)
```

## Referenzzählung
<a name="c-language-using-release"></a>

Um Lecks im Arbeitsspeicher zu verhindern, müssen Sie Ihre Referenzen an alle Objekte freigeben, die Sie erstellen, wenn Sie mit diesen fertig sind. Andernfalls erhalten Sie Lecks im Arbeitsspeicher. Das SDK bietet Methoden, um diese Aufgabe zu vereinfachen.

Wenn Sie ein übergeordnetes Objekt mit einem der folgenden untergeordneten Objekte erstellen, erhält und behält das übergeordnete Objekt einen Verweis auf das untergeordnete Objekt wie folgt bei:
+ Ein [Schlüsselbund](concepts.md#keyring), z. B. das Erstellen einer Sitzung mit einem Schlüsselbund
+ Ein standardmäßiger [Cryptographic Materials Manager](concepts.md#crypt-materials-manager) (CMM), z. B. das Erstellen einer Sitzung oder ein benutzerdefiniertes CMM mit einem Standard-CMM
+ Ein [Datenschlüssel-Cache](data-key-caching.md), z. B. das Erstellen eines Caching-CMM mit einem Schlüsselbund und Cache

Wenn Sie keinen unabhängigen Verweis auf das untergeordnete Objekt benötigen, können Sie den Verweis auf das untergeordnete Objekt freigeben, sobald Sie das übergeordnete Objekt erstellen. Der verbleibende Verweis auf das untergeordnete Objekt wird freigegeben, wenn das übergeordnete Objekt zerstört wird. Durch dieses Muster wird sichergestellt, dass Sie die Referenz auf jedes Objekt nur so lange wie nötig behalten. Es kommt auch nicht zu einem Leck im Arbeitsspeicher aufgrund von nicht freigegebenen Referenzen. 

Sie sind nur dafür verantwortlich, Verweise auf die untergeordneten Objekte freizugeben, die Sie explizit erstellen. Sie sind nicht verantwortlich für die Verwaltung von Verweisen auf Objekte, die das SDK für Sie erstellt. Wenn das SDK ein Objekt erstellt, z. B. das Standard-CMM, das die `aws_cryptosdk_caching_cmm_new_from_keyring` Methode einer Sitzung hinzufügt, verwaltet das SDK die Erstellung und Zerstörung des Objekts und seiner Verweise.

Wenn Sie im folgenden Beispiel eine Sitzung mit einem [Schlüsselbund](concepts.md#keyring) erstellen, erhält die Sitzung einen Verweis auf den Schlüsselbund und behält diesen Verweis bei, bis die Sitzung zerstört wird. Wenn Sie keinen zusätzlichen Verweis auf den Schlüsselbund beibehalten müssen, können Sie die `aws_cryptosdk_keyring_release`-Methode verwenden, um das Schlüsselbundobjekt freizugeben, sobald die Sitzung erstellt wird. Diese Methode verringert die Referenzanzahl für den Schlüsselbund. Der Verweis der Sitzung auf den Schlüsselbund wird freigegeben, wenn Sie `aws_cryptosdk_session_destroy` aufrufen, um die Sitzung zu zerstören. 

```
// The session gets a reference to the keyring.
struct aws_cryptosdk_session *session =	
	aws_cryptosdk_session_new_from_keyring_2(alloc, AWS_CRYPTOSDK_ENCRYPT, keyring);

// After you create a session with a keyring, release the reference to the keyring object.
aws_cryptosdk_keyring_release(keyring);
```

Für komplexere Aufgaben, wie die Wiederverwendung eines Schlüsselbunds für mehrere Sitzungen oder die Angabe einer Algorithmus-Suite in einem CMM, müssen Sie möglicherweise einen unabhängigen Verweis auf das Objekt beibehalten. Wenn ja, rufen Sie die Freigabemethoden nicht sofort auf. Geben Sie stattdessen Ihre Referenzen frei, wenn Sie die Objekte nicht mehr verwenden, zusätzlich zum Löschen der Sitzung.

[Diese Methode zur Referenzzählung funktioniert auch, wenn Sie eine alternative Methode verwenden CMMs, z. B. das CMM für die Zwischenspeicherung von Datenschlüsseln.](data-key-caching.md) Wenn Sie ein Cache-CMM aus einem Cache und einem Schlüsselbund erstellen, erhält das Caching-CMM einen Verweis auf beide Objekte. Sofern Sie sie nicht für eine andere Aufgabe benötigen, können Sie Ihre unabhängigen Verweise auf den Cache und den Schlüsselbund freigeben, sobald das Caching-CMM erstellt ist. Wenn Sie dann eine Sitzung mit dem Caching-CMM erstellen, können Sie Ihren Verweis auf das Caching-CMM freigeben. 

Beachten Sie, dass Sie nur für die Freigabe von Verweisen auf Objekte verantwortlich sind, die Sie explizit erstellen. Objekte, die die Methoden für Sie erstellen, wie z. B. das Standard-CMM, das dem Caching-CMM zugrunde liegt, werden von der Methode verwaltet.

```
/ Create the caching CMM from a cache and a keyring.
struct aws_cryptosdk_cmm *caching_cmm = aws_cryptosdk_caching_cmm_new_from_keyring(allocator, cache, kms_keyring, NULL, 60, AWS_TIMESTAMP_SECS);

// Release your references to the cache and the keyring.
aws_cryptosdk_materials_cache_release(cache);
aws_cryptosdk_keyring_release(kms_keyring);

// Create a session with the caching CMM.
struct aws_cryptosdk_session *session = aws_cryptosdk_session_new_from_cmm_2(allocator, AWS_CRYPTOSDK_ENCRYPT, caching_cmm);

// Release your references to the caching CMM.
aws_cryptosdk_cmm_release(caching_cmm);

// ...

aws_cryptosdk_session_destroy(session);
```

# AWS-Verschlüsselungs-SDK for C Beispiele
<a name="c-examples"></a>

Die folgenden Beispiele zeigen Ihnen, wie Sie mit AWS-Verschlüsselungs-SDK for C dem Daten ver- und entschlüsseln können. 

Die Beispiele in diesem Abschnitt zeigen, wie die Versionen 2.0 verwendet werden. *x* und später von AWS-Verschlüsselungs-SDK for C. Beispiele, die frühere Versionen verwenden, finden Sie in der [Release-Liste](https://github.com/aws/aws-encryption-sdk-c/releases) des [aws-encryption-sdk-c Repository-Repositorys](https://github.com/aws/aws-encryption-sdk-c/) unter GitHub.

Wenn Sie das installieren und erstellen AWS-Verschlüsselungs-SDK for C, ist der Quellcode für diese und andere Beispiele im `examples` Unterverzeichnis enthalten, und sie werden kompiliert und in das `build` Verzeichnis integriert. Sie finden sie auch im Unterverzeichnis [für Beispiele](https://github.com/aws/aws-encryption-sdk-c/tree/master/examples) des [aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/)Repositorys unter. GitHub

**Topics**
+ [

## Verschlüsseln und Entschlüsseln von Zeichenfolgen
](#c-example-strings)

## Verschlüsseln und Entschlüsseln von Zeichenfolgen
<a name="c-example-strings"></a>

Das folgende Beispiel zeigt Ihnen, wie Sie mit dem eine AWS-Verschlüsselungs-SDK for C Zeichenfolge ver- und entschlüsseln können.

Dieses Beispiel zeigt den [AWS KMS Schlüsselbund](use-kms-keyring.md), eine Art von Schlüsselbund, der ein AWS KMS key in [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/) verwendet, um Datenschlüssel zu generieren und zu verschlüsseln. Das Beispiel enthält in C\$1\$1 geschriebenen Code. Das AWS-Verschlüsselungs-SDK for C erfordert den Aufruf AWS SDK für C\$1\$1 , AWS KMS wenn AWS KMS Schlüsselbunde verwendet werden. Wenn Sie einen Schlüsselbund verwenden, der nicht interagiert AWS KMS, wie z. B. einen RAW-AES-Schlüsselbund, einen RSA-Rohschlüsselbund oder einen Mehrfachschlüsselbund, der keinen Schlüsselbund enthält, ist der nicht erforderlich. AWS KMS AWS SDK für C\$1\$1 

[https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) Hilfe zur Identifizierung von AWS KMS keys in einem AWS KMS Schlüsselbund finden Sie unter[Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund](use-kms-keyring.md#kms-keyring-id).

**Das vollständige Codebeispiel finden Sie unter**: [string.cpp](https://github.com/aws/aws-encryption-sdk-c/blob/master/examples/string.cpp)

**Topics**
+ [

### Verschlüsseln einer Zeichenfolge
](#c-example-string-encrypt)
+ [

### Entschlüsseln einer Zeichenfolge
](#c-example-string-decrypt)

### Verschlüsseln einer Zeichenfolge
<a name="c-example-string-encrypt"></a>

Im ersten Teil dieses Beispiels wird ein Schlüsselbund mit einem AWS KMS Schlüsselbund verwendet, AWS KMS key um eine Klartext-Zeichenfolge zu verschlüsseln. 

Schritt 1. Lädt Fehlerzeichenfolgen.  
Rufen Sie die `aws_cryptosdk_load_error_strings()` Methode in Ihrem C- oder C\$1\$1-Code auf. Sie lädt Fehlerinformationen, die für das Debuggen sehr nützlich sind.  
Sie müssen es nur einmal aufrufen, z. B. in Ihrer `main` Methode.  

```
/* Load error strings for debugging */
aws_cryptosdk_load_error_strings();
```

Schritt 2: Konstruieren Sie den Schlüsselbund.  
Erstellen Sie einen AWS KMS Schlüsselbund für die Verschlüsselung. Der Schlüsselbund in diesem Beispiel ist mit einem Schlüsselbund konfiguriert AWS KMS key, aber Sie können einen AWS KMS Schlüsselbund mit mehreren AWS KMS keys, auch AWS KMS keys in verschiedenen AWS-Regionen Konten, konfigurieren.   
Um einen AWS KMS key in einem Verschlüsselungsschlüsselbund in der zu identifizieren AWS-Verschlüsselungs-SDK for C, geben Sie einen [Schlüssel-ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) oder [Alias-ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-alias-arn) an. In einem Entschlüsselungsschlüsselbund müssen Sie einen Schlüssel-ARN verwenden. Details hierzu finden Sie unter [Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund](use-kms-keyring.md#kms-keyring-id).  
[Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund](use-kms-keyring.md#kms-keyring-id)  
Wenn Sie einen Schlüsselbund mit mehreren Schlüsselbunden erstellen AWS KMS keys, geben Sie den Schlüssel an, der AWS KMS key zur Generierung und Verschlüsselung des Klartext-Datenschlüssels verwendet wird, sowie ein optionales Array von zusätzlichen Schlüsseln, AWS KMS keys die denselben Klartext-Datenschlüssel verschlüsseln. In diesem Fall geben Sie nur den Generator an. AWS KMS key  
Ersetzen Sie vor Ausführung dieses Codes den ARN des Beispiel-Schlüssels durch einen gültigen.  

```
const char * key_arn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";    

struct aws_cryptosdk_keyring *kms_keyring = 
       Aws::Cryptosdk::KmsKeyring::Builder().Build(key_arn);
```

Schritt 3: Erstellen Sie eine Sitzung.  
Erstellen Sie eine Sitzung mithilfe des Allocators, eines Modus-Enumerators und des Schlüsselbunds.  
Jede Sitzung erfordert eine Modus: entweder `AWS_CRYPTOSDK_ENCRYPT` zum Verschlüsseln oder `AWS_CRYPTOSDK_DECRYPT` zum Entschlüsseln. Um den Modus einer vorhandenen Sitzung zu ändern, verwenden Sie die `aws_cryptosdk_session_reset`-Methode.  
Nach dem Erstellen einer Sitzung mit dem Schlüsselbund können Sie Ihre Referenz auf den Schlüsselbund unter Verwendung der Methode, die das SDK bietet, freigeben. Die Sitzung behält während ihrer Lebensdauer einen Verweis auf das Schlüsselbundobjekt bei. Verweise auf den Schlüsselbund und die Sitzungsobjekte werden freigegeben, wenn Sie die Sitzung zerstören. Diese [Referenzzähltechnik](c-language-using.md#c-language-using-release) hilft, Lecks im Arbeitsspeicher zu verhindern, und sorgt dafür, dass die Objekte nicht freigegeben werden, während sie verwendet werden.  

```
struct aws_cryptosdk_session *session = 
       aws_cryptosdk_session_new_from_keyring_2(alloc, AWS_CRYPTOSDK_ENCRYPT, kms_keyring);

/* When you add the keyring to the session, release the keyring object */
aws_cryptosdk_keyring_release(kms_keyring);
```

Schritt 4: Legen Sie den Verschlüsselungskontext fest.  
Ein [Verschlüsselungskontext](concepts.md#encryption-context) ist eine Art zufälliger, nicht geheimer, zusätzlich authentifizierter Daten. Wenn Sie bei Encrypt einen Verschlüsselungskontext angeben, bindet der Verschlüsselungskontext AWS Encryption SDK kryptografisch an den Chiffretext, sodass derselbe Verschlüsselungskontext zum Entschlüsseln der Daten erforderlich ist. Die Verwendung eines Verschlüsselungskontexts ist optional, aber wir empfehlen dies als eine bewährte Methode.  
Erstellen Sie zuerst eine Hash-Tabelle, die die Zeichenfolgen des Verschlüsselungskontexts enthält.  

```
/* Allocate a hash table for the encryption context */
int set_up_enc_ctx(struct aws_allocator *alloc, struct aws_hash_table *my_enc_ctx) 

// Create encryption context strings
AWS_STATIC_STRING_FROM_LITERAL(enc_ctx_key1, "Example");
AWS_STATIC_STRING_FROM_LITERAL(enc_ctx_value1, "String");
AWS_STATIC_STRING_FROM_LITERAL(enc_ctx_key2, "Company");
AWS_STATIC_STRING_FROM_LITERAL(enc_ctx_value2, "MyCryptoCorp");

// Put the key-value pairs in the hash table
aws_hash_table_put(my_enc_ctx, enc_ctx_key1, (void *)enc_ctx_value1, &was_created)
aws_hash_table_put(my_enc_ctx, enc_ctx_key2, (void *)enc_ctx_value2, &was_created)
```
Rufen Sie einen veränderlichen Zeiger auf den Verschlüsselungskontext in der Sitzung ab. Verwenden Sie anschließend die `aws_cryptosdk_enc_ctx_clone`-Funktion zum Kopieren des Verschlüsselungskontexts in die Sitzung. Halten Sie die Kopie in `my_enc_ctx`, damit Sie den Wert nach der Entschlüsselung der Daten validieren können.  
Der Verschlüsselungskontext ist Teil der Sitzung, nicht ein Parameter, der an die Sitzungs-Verarbeitungsfunktion übergeben wird. Dadurch wird sichergestellt, dass derselbe Verschlüsselungskontext für jedes Segment einer Nachricht verwendet wird, auch wenn die Sitzungs-Verarbeitungsfunktion mehrmals aufgerufen wird, um die gesamte Nachricht zu verschlüsseln.  

```
struct aws_hash_table *session_enc_ctx = aws_cryptosdk_session_get_enc_ctx_ptr_mut(session);

aws_cryptosdk_enc_ctx_clone(alloc, session_enc_ctx, my_enc_ctx)
```

Schritt 5: Verschlüsseln Sie die Zeichenfolge.  
Verwenden Sie zum Verschlüsseln der Klartext-Zeichenfolge die `aws_cryptosdk_session_process_full`-Methode, wobei sich die Sitzung im Verschlüsselungsmodus befinden muss. Diese Methode wurde in Version 1.9 eingeführt. AWS Encryption SDK *x* und 2.2. *x* ist für die Verschlüsselung und Entschlüsselung ohne Streaming konzipiert. Um Streaming-Daten zu verarbeiten, rufen Sie den `aws_cryptosdk_session_process` in einer Schleife auf.  
Beim Verschlüsseln sind die Klartextfelder Eingabefelder. Die Verschlüsselungstext-Felder sind Ausgabefelder. Wenn die Verarbeitung abgeschlossen ist, enthält das `ciphertext_output`-Feld die [verschlüsselte Nachricht](concepts.md#message), einschließlich des tatsächlichen Verschlüsselungstexts, der verschlüsselten Datenschlüssel und des Verschlüsselungskontexts. Sie können diese verschlüsselte Nachricht entschlüsseln, indem Sie die AWS Encryption SDK für jede unterstützte Programmiersprache verwenden.  

```
/* Gets the length of the plaintext that the session processed */
size_t ciphertext_len_output;
if (AWS_OP_SUCCESS != aws_cryptosdk_session_process_full(session,
                                  ciphertext_output,
                                  ciphertext_buf_sz_output,
                                  &ciphertext_len_output,
                                  plaintext_input,
                                  plaintext_len_input)) {
    aws_cryptosdk_session_destroy(session);
    return 8;
}
```

Schritt 6: Bereinigen Sie die Sitzung.  
Im letzten Schritt wird die Sitzung einschließlich der Verweise auf das CMM und den Schlüsselbund gelöscht.  
Wenn Sie es vorziehen, die Sitzung nicht zu zerstören, können Sie die Sitzung mit demselben Schlüsselbund und CMM wiederverwenden, um die Zeichenfolge zu entschlüsseln oder um andere Nachrichten zu verschlüsseln oder zu entschlüsseln. Um die Sitzung zum Entschlüsseln zu verwenden, wenden Sie die `aws_cryptosdk_session_reset`-Methode an, um den Modus in `AWS_CRYPTOSDK_DECRYPT` zu ändern.

### Entschlüsseln einer Zeichenfolge
<a name="c-example-string-decrypt"></a>

Im zweiten Teil dieses Beispiels wird eine verschlüsselte Nachricht entschlüsselt, die den Verschlüsselungstext der ursprünglichen Zeichenfolge enthält. 

Schritt 1: Fehlerzeichenfolgen laden.  
Rufen Sie die `aws_cryptosdk_load_error_strings()` Methode in Ihrem C- oder C\$1\$1-Code auf. Sie lädt Fehlerinformationen, die für das Debuggen sehr nützlich sind.  
Sie müssen es nur einmal aufrufen, z. B. in Ihrer `main` Methode.  

```
/* Load error strings for debugging */
aws_cryptosdk_load_error_strings();
```

Schritt 2: Konstruieren Sie den Schlüsselbund.  
Wenn Sie Daten entschlüsseln AWS KMS, übergeben Sie die [verschlüsselte Nachricht, die die Verschlüsselungs-API](concepts.md#message) zurückgegeben hat. Die [Decrypt-API](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) akzeptiert keine Eingabe. AWS KMS key AWS KMS Verwendet stattdessen dasselbe AWS KMS key zum Entschlüsseln des Chiffretextes, mit dem es ihn verschlüsselt hat. AWS Encryption SDK Mit können Sie jedoch einen AWS KMS Schlüsselbund angeben, bei dem die Option Verschlüsseln und Entschlüsseln aktiviert ist. AWS KMS keys   
Beim Entschlüsseln können Sie einen Schlüsselbund konfigurieren, der nur den enthält AWS KMS keys , den Sie zum Entschlüsseln der verschlüsselten Nachricht verwenden möchten. Möglicherweise möchten Sie einen Schlüsselbund erstellen, der nur den enthält AWS KMS key , der von einer bestimmten Rolle in Ihrer Organisation verwendet wird. Der AWS Encryption SDK wird niemals einen verwenden, es AWS KMS key sei denn, er ist im Entschlüsselungsschlüsselbund enthalten. Wenn das SDK die verschlüsselten Datenschlüssel nicht mithilfe des AWS KMS keys von Ihnen angegebenen Schlüsselbunds entschlüsseln kann, entweder weil keiner der Schlüssel AWS KMS keys im Schlüsselbund zum Verschlüsseln eines der Datenschlüssel verwendet wurde oder weil der Anrufer nicht berechtigt ist, den Schlüssel AWS KMS keys im Schlüsselbund zum Entschlüsseln zu verwenden, schlägt der Entschlüsselungsaufruf fehl.  
Wenn Sie AWS KMS key für eine Entschlüsselung einen Schlüsselbund angeben, müssen Sie seinen [Schlüssel-ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) verwenden. [Alias ARNs](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-alias-arn) sind nur in Schlüsselbunden für die Verschlüsselung zulässig. Hilfe zur Identifizierung von AWS KMS keys in einem AWS KMS Schlüsselbund finden Sie unter. [Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund](use-kms-keyring.md#kms-keyring-id)  
In diesem Beispiel geben wir einen Schlüsselbund an, der mit demselben konfiguriert ist, der zur Verschlüsselung der Zeichenfolge AWS KMS key verwendet wurde. Ersetzen Sie vor Ausführung dieses Codes den ARN des Beispiel-Schlüssels durch einen gültigen.  

```
const char * key_arn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"    

struct aws_cryptosdk_keyring *kms_keyring =
        Aws::Cryptosdk::KmsKeyring::Builder().Build(key_arn);
```

Schritt 3: Erstellen Sie eine Sitzung.  
Erstellen Sie eine Sitzung unter Verwendung des Allocators und des Schlüsselbunds. Zum Konfigurieren der Sitzung für die Entschlüsselung konfigurieren Sie die Sitzung mit dem `AWS_CRYPTOSDK_DECRYPT`-Modus.   
Nach dem Erstellen einer Sitzung mit einem Schlüsselbund können Sie Ihre Referenz auf den Schlüsselbund unter Verwendung der Methode, die das SDK bietet, freigeben. Die Sitzung behält während ihrer Lebensdauer einen Verweis auf das Schlüsselbundobjekt bei und sowohl die Sitzung als auch der Schlüsselbund werden freigegeben, wenn Sie die Sitzung zerstören. Diese Referenzzähltechnik hilft, Lecks im Arbeitsspeicher zu verhindern, und sorgt dafür, dass die Objekte nicht freigegeben werden, während sie verwendet werden.  

```
struct aws_cryptosdk_session *session =	
	aws_cryptosdk_session_new_from_keyring_2(alloc, AWS_CRYPTOSDK_DECRYPT, kms_keyring);

/* When you add the keyring to the session, release the keyring object */
aws_cryptosdk_keyring_release(kms_keyring);
```

Schritt 4: Entschlüsseln Sie die Zeichenfolge.  
Verwenden Sie zum Entschlüsseln der Zeichenfolge die `aws_cryptosdk_session_process_full`-Methode mit der Sitzung, die für die Entschlüsselung konfiguriert ist. Diese Methode wurde in den AWS Encryption SDK Versionen 1.9 eingeführt. *x* und 2.2. *x* ist für die Verschlüsselung und Entschlüsselung ohne Streaming konzipiert. Um Streaming-Daten zu verarbeiten, rufen Sie den `aws_cryptosdk_session_process` in einer Schleife auf.  
Beim Entschlüsseln sind die Verschlüsselungstext-Felder Eingabefelder. Die Klartextfelder sind Ausgabefelder. Das `ciphertext_input`-Feld enthält die [verschlüsselte Nachricht](message-format.md), die die Verschlüsselungsmethode zurückgegeben hat. Wenn die Verarbeitung abgeschlossen ist, enthält das `plaintext_output`-Feld die Klartext-Zeichenfolge (entschlüsselt).  

```
size_t plaintext_len_output;

if (AWS_OP_SUCCESS != aws_cryptosdk_session_process_full(session,
                                  plaintext_output,
                                  plaintext_buf_sz_output,
                                  &plaintext_len_output,
                                  ciphertext_input,
                                  ciphertext_len_input)) {
    aws_cryptosdk_session_destroy(session);
    return 13;
}
```

Schritt 5: Überprüfen Sie den Verschlüsselungskontext.  
Stellen Sie sicher, dass der tatsächliche Verschlüsselungskontext — der, der zum Entschlüsseln der Nachricht verwendet wurde — den Verschlüsselungskontext enthält, den Sie beim Verschlüsseln der Nachricht angegeben haben. Der tatsächliche Verschlüsselungskontext kann zusätzliche Paare enthalten, da der [Manager von kryptographischen Materialien](concepts.md#crypt-materials-manager) (CMM) Paare zum angegebenen Verschlüsselungskontext hinzufügen kann, bevor die Nachricht verschlüsselt wird.  
In der müssen Sie beim Entschlüsseln keinen Verschlüsselungskontext angeben AWS-Verschlüsselungs-SDK for C, da der Verschlüsselungskontext in der verschlüsselten Nachricht enthalten ist, die das SDK zurückgibt. Aber bevor sie die Klartext-Nachricht zurückgibt, sollte Ihre Entschlüsselungsfunktion überprüfen, dass alle Paare im angegebenen Verschlüsselungskontext in dem Verschlüsselungskontext erscheinen, der zum Entschlüsseln der Nachricht verwendet wurde.  
Rufen Sie zuerst einen schreibgeschützten Zeiger auf die Hash-Tabelle in der Sitzung ab. Diese Hash-Tabelle enthält den Verschlüsselungskontext, der zum Entschlüsseln der Nachricht verwendet wurde.   

```
const struct aws_hash_table *session_enc_ctx = aws_cryptosdk_session_get_enc_ctx_ptr(session);
```
Durchlaufen Sie anschließend den Verschlüsselungskontext in der `my_enc_ctx`-Hash-Tabelle, die Sie beim Verschlüsseln kopiert haben. Überprüfen Sie, dass alle Paare in der `my_enc_ctx`-Hash-Tabelle, die zum Verschlüsseln verwendet wurde, in der `session_enc_ctx`-Hash-Tabelle erscheinen, die zur Entschlüsselung verwendet wurde. Wenn ein Schlüssel nicht vorhanden ist oder dieser Schlüssel einen anderen Wert hat, beenden Sie die Verarbeitung und schreiben Sie eine Fehlermeldung.  

```
for (struct aws_hash_iter iter = aws_hash_iter_begin(my_enc_ctx); !aws_hash_iter_done(&iter);
      aws_hash_iter_next(&iter)) {
     struct aws_hash_element *session_enc_ctx_kv_pair;
     aws_hash_table_find(session_enc_ctx, iter.element.key, &session_enc_ctx_kv_pair)

    if (!session_enc_ctx_kv_pair ||
        !aws_string_eq(
            (struct aws_string *)iter.element.value, (struct aws_string *)session_enc_ctx_kv_pair->value)) {
        fprintf(stderr, "Wrong encryption context!\n");
        abort();
    }
}
```

Schritt 6: Bereinigen Sie die Sitzung.  
Nachdem Sie den Verschlüsselungskontext überprüft haben, können Sie die Sitzung löschen oder wiederverwenden. Wenn Sie die Sitzung neu konfigurieren müssen, verwenden Sie die `aws_cryptosdk_session_reset` Methode.  

```
aws_cryptosdk_session_destroy(session);
```

# AWS Encryption SDK für .NET
<a name="dot-net"></a>

Die AWS Encryption SDK for .NET ist eine clientseitige Verschlüsselungsbibliothek für Entwickler, die Anwendungen in C\$1 und anderen .NET-Programmiersprachen schreiben. Sie wird unter Windows, macOS und Linux unterstützt.

**Anmerkung**  
Version 4.0.0 von AWS Encryption SDK für .NET weicht von der Nachrichtenspezifikation ab. AWS Encryption SDK Aus diesem Grund können Nachrichten, die mit Version 4.0.0 verschlüsselt wurden, nur mit Version 4.0.0 oder höher von for.NET entschlüsselt werden. AWS Encryption SDK Sie können mit keiner anderen Programmiersprachenimplementierung entschlüsselt werden.  
Version 4.0.1 von AWS Encryption SDK for .NET schreibt Nachrichten gemäß der AWS Encryption SDK Nachrichtenspezifikation und ist mit anderen Programmiersprachenimplementierungen interoperabel. Standardmäßig kann Version 4.0.1 Nachrichten lesen, die mit Version 4.0.0 verschlüsselt wurden. Wenn Sie jedoch mit Version 4.0.0 verschlüsselte Nachrichten nicht entschlüsseln möchten, können Sie die [https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/Examples/NetV4_0_0Example.cs](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/Examples/NetV4_0_0Example.cs)Eigenschaft so angeben, dass der Client diese Nachrichten nicht lesen kann. Weitere Informationen finden Sie in den [Versionshinweisen zu Version 4.0.1 im Repository](https://github.com/aws/aws-encryption-sdk/releases/tag/v4.0.1) unter. aws-encryption-sdk GitHub

Das AWS Encryption SDK für.NET 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)
**Anmerkung**  
Version 4. *x* of the AWS Encryption SDK for .NET unterstützt 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
+ [Keine Protokollierung oder Stack-Traces](#dot-net-debugging) von AWS Encryption SDK für.NET
+ [Benötigt den AWS SDK für .NET](#dot-net-install)

Das AWS Encryption SDK für .NET enthält alle Sicherheitsfunktionen, die in Version 2.0 eingeführt wurden. *x* und höher von anderen Sprachimplementierungen von. AWS Encryption SDK Wenn Sie jedoch for.NET verwenden, AWS Encryption SDK 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 [Verpflichtungsrichtlinie](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 für.NET-Version ist ein Produkt von AWS Encryption SDK In [Dafny](https://github.com/dafny-lang/dafny/blob/master/README.md), einer formalen Überprüfungssprache, 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)
+ Einzelheiten zur Programmierung mit dem AWS Encryption SDK für.NET finden Sie im [https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/)Verzeichnis des aws-encryption-sdk Repositorys unter GitHub.

**Topics**
+ [Installieren und Erstellen](#dot-net-install)
+ [Debuggen](#dot-net-debugging)
+ [Beispiele](dot-net-examples.md)

## Installation von AWS Encryption SDK für.NET
<a name="dot-net-install"></a>

Das AWS Encryption SDK für .NET ist als [https://www.nuget.org/packages/AWS.Cryptography.EncryptionSDK](https://www.nuget.org/packages/AWS.Cryptography.EncryptionSDK)Paket in verfügbar NuGet. Einzelheiten zur Installation und Erstellung von AWS Encryption SDK für.NET finden Sie in der Datei [README.md](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/#readme) im Repository. `aws-encryption-sdk-net`

**Version 3.x**  
Ausführung 3. *x* of the AWS Encryption SDK für .NET unterstützt .NET Framework 4.5.2 — 4.8 nur unter Windows. Es unterstützt .NET Core 3.0\$1 und .NET 5.0 und höher auf allen unterstützten Betriebssystemen.

**Version 4.x**  
Ausführung 4. *x* of the AWS Encryption SDK für .NET unterstützt .NET 6.0 und .NET Framework net48 und höher. Version 4. *x* benötigt das AWS SDK for .NET v3.

**Version 5.x**  
Ausführung 5. *x* of the AWS Encryption SDK für .NET unterstützt .NET 6.0 und .NET Framework net48 und höher. Version 5. *x* benötigt Version 2. *x* der Material Providers Library (MPL) und des AWS SDK for .NET v4.

 AWS Encryption SDK Für .NET sind die Schlüssel erforderlich, SDK für .NET auch wenn Sie nicht AWS Key Management Service (AWS KMS) verwenden. Es ist mit dem NuGet Paket installiert. Sofern Sie jedoch keine AWS KMS Schlüssel verwenden, benötigt AWS Encryption SDK für.NET keine AWS Anmeldeinformationen und keine Interaktion mit einem AWS Dienst. AWS-Konto Hilfe beim Einrichten eines AWS Kontos finden Sie bei Bedarf unter[Verwenden von AWS Encryption SDK with AWS KMS](getting-started.md).

## Debuggen des AWS Encryption SDK für .NET
<a name="dot-net-debugging"></a>

Das AWS Encryption SDK für .NET generiert keine Protokolle. Ausnahmen im AWS Encryption SDK für.NET erzeugen eine Ausnahmemeldung, aber keine Stack-Traces.

Um Ihnen beim Debuggen zu helfen, stellen Sie sicher, dass Sie die SDK für .NET Anmeldung bei aktivieren. Mithilfe der Protokolle und Fehlermeldungen von SDK für .NET können Sie Fehler, die in der auftreten, SDK für .NET von denen in AWS Encryption SDK für.NET unterscheiden. Hilfe zur SDK für .NET Protokollierung finden Sie [AWSLogging](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-config-other.html#config-setting-awslogging)im *AWS SDK für .NET Entwicklerhandbuch*. (Um das Thema zu lesen, erweitern Sie den Abschnitt **Öffnen, um .NET Framework-Inhalte anzuzeigen**.)

# AWS Encryption SDK für .NET-Beispiele
<a name="dot-net-examples"></a>

Die folgenden Beispiele zeigen die grundlegenden Codierungsmuster, die Sie beim Programmieren mit dem AWS Encryption SDK für .NET verwenden. Insbesondere instanziieren Sie die Bibliothek AWS Encryption SDK und die Material Provider-Bibliothek. Bevor Sie dann jede Methode aufrufen, instanziieren Sie ein Objekt, das die Eingabe für die Methode definiert. Dies ist dem Codierungsmuster sehr ähnlich, das Sie in der verwenden. SDK für .NET

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).

Weitere Beispiele AWS Encryption SDK für die Programmierung mit für.NET finden Sie in den [Beispielen](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/Examples) im `aws-encryption-sdk-net` Verzeichnis des `aws-encryption-sdk` Repositorys unter GitHub.

## Verschlüsseln von Daten im AWS Encryption SDK für.NET
<a name="dot-net-example-encrypt"></a>

Dieses Beispiel zeigt das grundlegende Muster für die Verschlüsselung von Daten. Es verschlüsselt eine kleine Datei mit Datenschlüsseln, die durch einen AWS KMS Umschließungsschlüssel geschützt sind.

Schritt 1: Instanziieren Sie die Bibliothek AWS Encryption SDK und die Materiallieferantenbibliothek.  
Beginnen Sie mit der Instanziierung der Bibliothek AWS Encryption SDK und der Materiallieferantenbibliothek. Sie verwenden die Methoden in, AWS Encryption SDK um Daten zu verschlüsseln und zu entschlüsseln. Sie verwenden die Methoden in der Materialanbieter-Bibliothek, um die Schlüsselbunde zu erstellen, die angeben, welche Schlüssel Ihre Daten schützen.  
Die Art AWS Encryption SDK und Weise, wie Sie die Material Provider-Bibliothek instanziieren, unterscheidet sich zwischen den Versionen 3. *x* und 4. *x* von AWS Encryption SDK für .NET. Alle folgenden Schritte sind für beide Versionen 3 identisch. *x* und 4. *x* von AWS Encryption SDK für .NET.  

```
// Instantiate the AWS Encryption SDK and material providers
var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk();
var materialProviders =
    AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders();
```

```
// Instantiate the AWS Encryption SDK and material providers
var esdk =  new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
```

Schritt 2: Erstellen Sie ein Eingabeobjekt für den Schlüsselbund.  
Jede Methode, die einen Schlüsselbund erstellt, hat eine entsprechende Eingabeobjektklasse. Um beispielsweise das Eingabeobjekt für die `CreateAwsKmsKeyring()` Methode zu erstellen, erstellen Sie eine Instanz der `CreateAwsKmsKeyringInput` Klasse.  
Obwohl die Eingabe für diesen Schlüsselbund keinen [Generatorschlüssel spezifiziert, ist der einzelne KMS-Schlüssel](use-kms-keyring.md#kms-keyring-encrypt), der durch den `KmsKeyId` Parameter angegeben wird, der Generatorschlüssel. Er generiert und verschlüsselt den Datenschlüssel, der die Daten verschlüsselt.   
Dieses Eingabeobjekt benötigt einen AWS KMS Client für den AWS-Region KMS-Schlüssel. Um einen AWS KMS Client zu erstellen, instanziieren Sie die `AmazonKeyManagementServiceClient` Klasse in der. SDK für .NET Wenn Sie den `AmazonKeyManagementServiceClient()` Konstruktor ohne Parameter aufrufen, wird ein Client mit den Standardwerten erstellt.  
In einem AWS KMS Schlüsselbund, der AWS Encryption SDK für die Verschlüsselung mit für.NET verwendet wird, können Sie [die KMS-Schlüssel anhand der Schlüssel-ID, des Schlüssel-ARN, des Aliasnamens oder des Alias-ARN identifizieren](use-kms-keyring.md#kms-keyring-id). In einem AWS KMS Schlüsselbund, der zum Entschlüsseln verwendet wird, müssen Sie einen Schlüssel-ARN verwenden, um jeden KMS-Schlüssel zu identifizieren. Wenn Sie Ihren Verschlüsselungsschlüsselbund für die Entschlüsselung wiederverwenden möchten, verwenden Sie eine ARN-Schlüssel-ID für alle KMS-Schlüssel.  

```
string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

// Instantiate the keyring input object
var kmsKeyringInput = new CreateAwsKmsKeyringInput
{    
    KmsClient = new AmazonKeyManagementServiceClient(),
    KmsKeyId = keyArn
};
```

Schritt 3: Erstellen Sie den Schlüsselbund.  
Um den Schlüsselbund zu erstellen, rufen Sie die Schlüsselbundmethode mit dem Schlüsselbund-Eingabeobjekt auf. In diesem Beispiel wird die `CreateAwsKmsKeyring()` Methode verwendet, die nur einen KMS-Schlüssel benötigt.  

```
var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
```

Schritt 4: Definieren Sie einen Verschlüsselungskontext.  
Ein [Verschlüsselungskontext](concepts.md#encryption-context) ist ein optionales, aber dringend empfohlenes Element kryptografischer Operationen in der AWS Encryption SDK. Sie können ein oder mehrere nicht geheime Schlüssel-Wert-Paare definieren.  
Mit Version 4. *x* of the AWS Encryption SDK für .NET, Sie können in allen Verschlüsselungsanforderungen mit dem [erforderlichen Verschlüsselungskontext CMM einen Verschlüsselungskontext angeben](configure.md#config-required-encryption-context-cmm).

```
// Define the encryption context
var encryptionContext = new Dictionary<string, string>()
{
    {"purpose", "test"}
};
```

Schritt 5: Erstellen Sie das Eingabeobjekt für die Verschlüsselung.  
Bevor Sie die `Encrypt()` Methode aufrufen, erstellen Sie eine Instanz der `EncryptInput` Klasse.  

```
string plaintext = File.ReadAllText("C:\\Documents\\CryptoTest\\TestFile.txt");
            
// Define the encrypt input
var encryptInput = new EncryptInput
{
    Plaintext = plaintext,
    Keyring = keyring,
    EncryptionContext = encryptionContext
};
```

Schritt 6: Verschlüsseln Sie den Klartext.  
Verwenden Sie die `Encrypt()` Methode von AWS Encryption SDK , um den Klartext mit dem von Ihnen definierten Schlüsselbund zu verschlüsseln.   
Die `EncryptOutput` `Encrypt() ` Methode gibt Methoden zum Abrufen der verschlüsselten Nachricht (`Ciphertext`), den Verschlüsselungskontext und die Algorithmus-Suite an.   

```
var encryptOutput = encryptionSdk.Encrypt(encryptInput);
```

Schritt 7: Holen Sie sich die verschlüsselte Nachricht.  
Die `Decrypt()` Methode in AWS Encryption SDK for .NET verwendet das `Ciphertext` Mitglied der `EncryptOutput` Instanz.  
Das `Ciphertext` Mitglied des `EncryptOutput` Objekts ist die [verschlüsselte Nachricht](concepts.md#message), ein portables Objekt, das die verschlüsselten Daten, die verschlüsselten Datenschlüssel und die Metadaten einschließlich des Verschlüsselungskontextes enthält. Sie können die verschlüsselte Nachricht sicher für einen längeren Zeitraum speichern oder sie an die `Decrypt()` Methode zur Wiederherstellung des Klartextes weiterleiten.   

```
var encryptedMessage = encryptOutput.Ciphertext;
```

## Entschlüsselung im strikten Modus in für.NET AWS Encryption SDK
<a name="dot-net-decrypt-strict"></a>

Bewährte Methoden empfehlen, dass Sie die Schlüssel angeben, die Sie zum Entschlüsseln von Daten verwenden. Diese Option wird als *strikter* Modus bezeichnet. Der AWS Encryption SDK verwendet nur die KMS-Schlüssel, die Sie in Ihrem Schlüsselbund angeben, um den Chiffretext zu entschlüsseln. Die Schlüssel in Ihrem Entschlüsselungsschlüsselbund müssen mindestens einen der Schlüssel enthalten, mit denen die Daten verschlüsselt wurden.

Dieses Beispiel zeigt das grundlegende Muster der Entschlüsselung im strikten Modus mit dem AWS Encryption SDK für.NET.

Schritt 1: Instanziieren Sie die Bibliothek AWS Encryption SDK und die Material Provider-Bibliothek.  

```
// Instantiate the AWS Encryption SDK and material providers
var esdk =  new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
```

Schritt 2: Erstellen Sie das Eingabeobjekt für Ihren Schlüsselbund.  
Um die Parameter für die Schlüsselbundmethode anzugeben, erstellen Sie ein Eingabeobjekt. Jede Schlüsselbundmethode in der AWS Encryption SDK für.NET hat ein entsprechendes Eingabeobjekt. Da in diesem Beispiel die `CreateAwsKmsKeyring()` Methode verwendet wird, um den Schlüsselbund zu erstellen, wird die `CreateAwsKmsKeyringInput` Klasse für die Eingabe instanziiert.  
In einem Schlüsselbund für die Entschlüsselung müssen Sie einen Schlüssel-ARN verwenden, um KMS-Schlüssel zu identifizieren.  

```
string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

// Instantiate the keyring input object
var kmsKeyringInput = new CreateAwsKmsKeyringInput
{
    KmsClient = new AmazonKeyManagementServiceClient(),
    KmsKeyId = keyArn
};
```

Schritt 3: Erstellen Sie den Schlüsselbund.  
Um den Schlüsselbund für die Entschlüsselung zu erstellen, werden in diesem Beispiel die `CreateAwsKmsKeyring()` Methode und das Schlüsselbund-Eingabeobjekt verwendet.  

```
var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
```

Schritt 4: Erstellen Sie das Eingabeobjekt für die Entschlüsselung.  
Um das Eingabeobjekt für die `Decrypt()` Methode zu erstellen, instanziieren Sie die Klasse. `DecryptInput`  
Der `Ciphertext` Parameter des `DecryptInput()` Konstruktors verwendet das `Ciphertext` Mitglied des `EncryptOutput` Objekts, das die `Encrypt()` Methode zurückgegeben hat. Die `Ciphertext` Eigenschaft stellt die [verschlüsselte Nachricht](concepts.md#message) dar, die die verschlüsselten Daten, verschlüsselten Datenschlüssel und Metadaten enthält, die zum Entschlüsseln der Nachricht AWS Encryption SDK benötigt werden.  
Mit Version 4. *x* von AWS Encryption SDK für .NET können Sie den optionalen `EncryptionContext` Parameter verwenden, um Ihren Verschlüsselungskontext in der `Decrypt()` Methode anzugeben.  
Verwenden Sie den `EncryptionContext` Parameter, um zu überprüfen, ob der beim Verschlüsseln verwendete Verschlüsselungskontext in dem Verschlüsselungskontext *enthalten ist*, der zur Entschlüsselung des Chiffretextes verwendet wird. Dadurch werden Paare zum Verschlüsselungskontext AWS Encryption SDK hinzugefügt, einschließlich der digitalen Signatur, wenn Sie eine Algorithmussuite mit Signierung verwenden, z. B. die Standard-Algorithmussuite.  

```
var encryptedMessage = encryptOutput.Ciphertext;

var decryptInput = new DecryptInput
{
    Ciphertext = encryptedMessage,
    Keyring = keyring,
    EncryptionContext = encryptionContext // OPTIONAL
};
```

Schritt 5: Entschlüsseln Sie den Chiffretext.  

```
var decryptOutput = encryptionSdk.Decrypt(decryptInput);
```

Schritt 6: Überprüfen Sie den Verschlüsselungskontext — Version 3. *x*  
Die `Decrypt()` Methode der Version 3. *x* von AWS Encryption SDK for .NET benötigt keinen Verschlüsselungskontext. Es ruft die Verschlüsselungskontextwerte aus den Metadaten in der verschlüsselten Nachricht ab. Bevor Sie den Klartext zurückgeben oder verwenden, sollten Sie jedoch überprüfen, ob der Verschlüsselungskontext, der zum Entschlüsseln des Chiffretextes verwendet wurde, den Verschlüsselungskontext enthält, den Sie bei der Verschlüsselung angegeben haben.   
Stellen Sie sicher, dass der beim Verschlüsseln verwendete Verschlüsselungskontext in dem Verschlüsselungskontext *enthalten ist*, der zum Entschlüsseln des Chiffretextes verwendet wurde. Das AWS Encryption SDK fügt dem Verschlüsselungskontext Paare hinzu, einschließlich der digitalen Signatur, wenn Sie eine Algorithmussuite mit Signierung verwenden, z. B. die Standard-Algorithmussuite.  

```
// Verify the encryption context
string contextKey = "purpose";
string contextValue = "test";

if (!decryptOutput.EncryptionContext.TryGetValue(contextKey, out var decryptContextValue)
    || !decryptContextValue.Equals(contextValue))
{
    throw new Exception("Encryption context does not match expected values");
}
```

## Entschlüsseln mit einem Discovery-Schlüsselbund im für.NET AWS Encryption SDK
<a name="dot-net-decrypt-discovery"></a>

Anstatt die KMS-Schlüssel für die Entschlüsselung anzugeben, können Sie einen AWS KMS *Discovery-Schlüsselbund* angeben. Dabei handelt es sich um einen Schlüsselbund, der keine KMS-Schlüssel angibt. Mit einem Discovery-Schlüsselbund können die Daten mit dem KMS-Schlüssel, der sie verschlüsselt hat, AWS Encryption SDK entschlüsselt werden, sofern der Anrufer über die Entschlüsselungsberechtigung für den Schlüssel verfügt. Für bewährte Methoden sollten Sie einen Erkennungsfilter hinzufügen, der die KMS-Schlüssel, die verwendet werden können, auf diejenigen beschränkt, die insbesondere AWS-Konten für eine bestimmte Partition verwendet werden können. 

Der AWS Encryption SDK für.NET bietet einen einfachen Discovery-Schlüsselbund, für den ein AWS KMS Client erforderlich ist, und einen Discovery-Mehrfachschlüsselbund, für den Sie einen oder mehrere Schlüssel angeben müssen. AWS-Regionen Sowohl der Client als auch die Regionen beschränken die Anzahl der KMS-Schlüssel, die zum Entschlüsseln der verschlüsselten Nachricht verwendet werden können. Die Eingabeobjekte für beide Schlüsselbunde verwenden den empfohlenen Erkennungsfilter.

Das folgende Beispiel zeigt das Muster für die Entschlüsselung von Daten mit einem AWS KMS Discovery-Schlüsselbund und einem Discovery-Filter.

Schritt 1: Instanziieren Sie die Bibliothek AWS Encryption SDK und die Materiallieferantenbibliothek.  

```
// Instantiate the AWS Encryption SDK and material providers
var esdk =  new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
```

Schritt 2: Erstellen Sie das Eingabeobjekt für den Schlüsselbund.  
Um die Parameter für die Schlüsselbundmethode anzugeben, erstellen Sie ein Eingabeobjekt. Jede Schlüsselbundmethode in der AWS Encryption SDK für.NET hat ein entsprechendes Eingabeobjekt. Da in diesem Beispiel die `CreateAwsKmsDiscoveryKeyring()` Methode verwendet wird, um den Schlüsselbund zu erstellen, wird die `CreateAwsKmsDiscoveryKeyringInput` Klasse für die Eingabe instanziiert.  

```
List<string> accounts = new List<string> { "111122223333" };

var discoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput
{
    KmsClient = new AmazonKeyManagementServiceClient(),
    DiscoveryFilter = new DiscoveryFilter()
    {
        AccountIds = accounts,
        Partition = "aws"
    }
};
```

Schritt 3: Erstellen Sie den Schlüsselbund.  
Um den Schlüsselbund für die Entschlüsselung zu erstellen, werden in diesem Beispiel die `CreateAwsKmsDiscoveryKeyring()` Methode und das Schlüsselbund-Eingabeobjekt verwendet.  

```
var discoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(discoveryKeyringInput);
```

Schritt 4: Erstellen Sie das Eingabeobjekt für die Entschlüsselung.  
Um das Eingabeobjekt für die `Decrypt()` Methode zu erstellen, instanziieren Sie die Klasse. `DecryptInput` Der Wert des `Ciphertext` Parameters ist das `Ciphertext` Mitglied des `EncryptOutput` Objekts, das die `Encrypt()` Methode zurückgibt.  
Mit Version 4. *x* von AWS Encryption SDK für .NET können Sie den optionalen `EncryptionContext` Parameter verwenden, um Ihren Verschlüsselungskontext in der `Decrypt()` Methode anzugeben.  
Verwenden Sie den `EncryptionContext` Parameter, um zu überprüfen, ob der beim Verschlüsseln verwendete Verschlüsselungskontext in dem Verschlüsselungskontext *enthalten ist*, der zur Entschlüsselung des Chiffretextes verwendet wird. Dadurch werden Paare zum Verschlüsselungskontext AWS Encryption SDK hinzugefügt, einschließlich der digitalen Signatur, wenn Sie eine Algorithmussuite mit Signierung verwenden, z. B. die Standard-Algorithmussuite.  

```
var ciphertext = encryptOutput.Ciphertext;

var decryptInput = new DecryptInput
{
    Ciphertext = ciphertext,
    Keyring = discoveryKeyring,
    EncryptionContext = encryptionContext // OPTIONAL
    
};
var decryptOutput = encryptionSdk.Decrypt(decryptInput);
```

Schritt 5: Überprüfen Sie den Verschlüsselungskontext — Version 3. *x*  
Die `Decrypt()` Methode der Version 3. *x* von AWS Encryption SDK for .NET nimmt keinen Verschlüsselungskontext an`Decrypt()`. Es ruft die Verschlüsselungskontextwerte aus den Metadaten in der verschlüsselten Nachricht ab. Bevor Sie den Klartext zurückgeben oder verwenden, sollten Sie jedoch überprüfen, ob der Verschlüsselungskontext, der zum Entschlüsseln des Chiffretextes verwendet wurde, den Verschlüsselungskontext enthält, den Sie bei der Verschlüsselung angegeben haben.   
Stellen Sie sicher, dass der beim Verschlüsseln verwendete Verschlüsselungskontext in dem Verschlüsselungskontext *enthalten ist*, der zum Entschlüsseln des Chiffretextes verwendet wurde. Das AWS Encryption SDK fügt dem Verschlüsselungskontext Paare hinzu, einschließlich der digitalen Signatur, wenn Sie eine Algorithmussuite mit Signierung verwenden, z. B. die Standard-Algorithmussuite.   

```
// Verify the encryption context
string contextKey = "purpose";
string contextValue = "test";

if (!decryptOutput.EncryptionContext.TryGetValue(contextKey, out var decryptContextValue)
    || !decryptContextValue.Equals(contextValue))
{
    throw new Exception("Encryption context does not match expected values");
}
```

# AWS Encryption SDK für Go
<a name="go"></a>

In diesem Thema wird erklärt, wie Sie AWS Encryption SDK for Go installieren und verwenden. Einzelheiten zur Programmierung mit AWS Encryption SDK for Go finden Sie unter dem [Go-Verzeichnis](https://github.com/aws/aws-encryption-sdk/tree/mainline/releases/go/encryption-sdk/) des aws-encryption-sdk Repositorys unter GitHub.

Das AWS Encryption SDK for Go 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). AWS Encryption SDK For Go 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 Go 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 Go 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 [Verpflichtungspolitik](concepts.md#commitment-policy) anpassen. Details hierzu finden Sie unter [Wie legen Sie Ihre Verpflichtungsrichtlinie fest](migrate-commitment-policy.md#migrate-commitment-step1).

 AWS Encryption SDK For Go 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 Go finden Sie in den [Go-Beispielen](https://github.com/aws/aws-encryption-sdk/tree/mainline/releases/go/encryption-sdk/examples) im aws-encryption-sdk Repository unter GitHub.

**Topics**
+ [

## Voraussetzungen
](#prerequisites-go)
+ [

## Installation
](#go-installation)

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

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

**Eine unterstützte Version von Go**  
Go 1.23 oder höher ist AWS Encryption SDK für for Go erforderlich.  
Weitere Informationen zum Herunterladen und Installieren von Go finden Sie unter [Go-Installation](https://go.dev/doc/install).

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

Installieren Sie die neueste Version von AWS Encryption SDK for Go. Einzelheiten zur Installation und Erstellung von AWS Encryption SDK for Go finden Sie in der Datei [README.md](https://github.com/aws/aws-encryption-sdk/tree/mainline/releases/go/encryption-sdk/README.md) im Go-Verzeichnis des aws-encryption-sdk Repositorys unter. GitHub

**Installieren der neuesten Version**
+ Installieren Sie das for Go AWS Encryption SDK 

  ```
  go get github.com/aws/aws-encryption-sdk/releases/go/encryption-sdk@latest
  ```
+ Installieren Sie die [Cryptographic Material Providers Library](https://github.com/aws/aws-cryptographic-material-providers-library) (MPL)

  ```
  go get github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl
  ```

# AWS-Verschlüsselungs-SDK for Java
<a name="java"></a>

In diesem Thema wird erklärt, wie das AWS-Verschlüsselungs-SDK for Java installiert und verwendet wird. Einzelheiten zur Programmierung mit dem AWS-Verschlüsselungs-SDK for Java finden Sie im [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/)Repository unter GitHub. Eine API-Dokumentation finden Sie im [Javadoc](https://aws.github.io/aws-encryption-sdk-java/) für das AWS-Verschlüsselungs-SDK for Java.

**Topics**
+ [

## Voraussetzungen
](#java-prerequisites)
+ [

## Installation
](#java-installation)
+ [Beispiele](java-example-code.md)

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

Stellen Sie vor der Installation von sicher AWS-Verschlüsselungs-SDK for Java, dass Sie die folgenden Voraussetzungen erfüllen.

**Eine Java-Entwicklungsumgebung**  
Sie benötigen Java 8 oder höher. Klicken Sie auf der Oracle-Website auf [Java SE Downloads](https://www.oracle.com/java/technologies/downloads/) und laden und installieren Sie anschließend das Java SE Development Kit (JDK).  
Wenn Sie das Oracle JDK verwenden, müssen Sie auch die [Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files](http://www.oracle.com/java/technologies/javase-jce8-downloads.html) herunterladen und installieren.

**Bouncy Castle**  
Das AWS-Verschlüsselungs-SDK for Java erfordert [Bouncy Castle](https://www.bouncycastle.org/download/bouncy-castle-java/).   
+ AWS-Verschlüsselungs-SDK for Java Versionen 1.6.1 und höher verwenden Bouncy Castle, um kryptografische Objekte zu serialisieren und zu deserialisieren. Sie können Bouncy Castle oder [Bouncy Castle FIPS](https://www.bouncycastle.org/about/bouncy-castle-fips-faq/) verwenden, um diese Anforderung zu erfüllen. ****Hilfe zur Installation und Konfiguration von Bouncy Castle FIPS finden Sie in der [BC FIPS-Dokumentation](https://www.bouncycastle.org/documentation/), insbesondere in den Benutzerhandbüchern und den Sicherheitsrichtlinien.**** PDFs
+ Frühere Versionen von AWS-Verschlüsselungs-SDK for Java verwenden die Kryptografie-API von Bouncy Castle für Java. Diese Anforderung wird nur von Nicht-FIPS Bouncy Castle erfüllt.
Wenn Sie Bouncy Castle nicht haben, gehen Sie zu [Bouncy Castle für Java herunterladen](https://bouncycastle.org/download/bouncy-castle-java/), um die Anbieterdatei herunterzuladen, die Ihrem JDK entspricht. [Sie können auch [Apache Maven](https://maven.apache.org/) verwenden, um das Artefakt für den Standard-Bouncy Castle-Anbieter ([bcprov-ext-jdk15on](https://mvnrepository.com/artifact/org.bouncycastle/bcprov-ext-jdk15on)) oder das Artefakt für Bouncy Castle FIPS (bc-fips) abzurufen.](https://mvnrepository.com/artifact/org.bouncycastle/bc-fips)

**AWS SDK für Java**  
Version 3. *x* der AWS-Verschlüsselungs-SDK for Java erfordert das AWS SDK for Java 2.x, auch wenn Sie keine AWS KMS Schlüsselringe verwenden.  
Ausführung 2. *x* oder früher von benötigt AWS-Verschlüsselungs-SDK for Java das nicht AWS SDK für Java. Die AWS SDK für Java ist jedoch erforderlich, um [AWS Key Management Service](https://aws.amazon.com/kms/)(AWS KMS) als Hauptschlüsselanbieter zu verwenden. Ab AWS-Verschlüsselungs-SDK for Java Version 2.4.0 AWS-Verschlüsselungs-SDK for Java unterstützt der sowohl Version 1.x als auch 2.x von. AWS SDK für Java AWS Encryption SDK Der Code für AWS SDK für Java 1.x und 2.x ist interoperabel. Sie können beispielsweise Daten mit AWS Encryption SDK Code verschlüsseln, der 1.x unterstützt, und sie mit Code entschlüsseln, der AWS SDK für Java 1.x unterstützt AWS SDK for Java 2.x (oder umgekehrt). Versionen vor 2.4.0 AWS-Verschlüsselungs-SDK for Java unterstützen nur 1.x. AWS SDK für Java Hinweise zur Aktualisierung Ihrer Version von finden Sie unter AWS Encryption SDK. [Migrieren Sie Ihre AWS Encryption SDK](migration.md)  
Wenn Sie Ihren AWS-Verschlüsselungs-SDK for Java Code von AWS SDK für Java 1.x auf aktualisieren AWS SDK for Java 2.x, ersetzen Sie Verweise auf die [`AWSKMS`Schnittstelle](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/kms/package-summary.html) in AWS SDK für Java 1.x durch Verweise auf die [`KmsClient`Schnittstelle](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/kms/package-summary.html) in. AWS SDK for Java 2.x[Das AWS-Verschlüsselungs-SDK for Java unterstützt die Schnittstelle nicht. `KmsAsyncClient`](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/kms/KmsAsyncClient.html) Aktualisieren Sie außerdem Ihren Code, sodass die AWS KMS zugehörigen Objekte im `kmssdkv2` Namespace statt im `kms` Namespace verwendet werden.   
Verwenden Sie Apache Maven AWS SDK für Java, um das zu installieren.   
+ Um [das gesamte AWS SDK für Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup-project-maven.html#build-the-entire-sdk-into-your-project) als Abhängigkeit zu importieren, deklarieren Sie es in Ihrer `pom.xml`-Datei.
+ Um eine Abhängigkeit nur für das AWS KMS Modul in AWS SDK für Java 1.x zu erstellen, folgen Sie den Anweisungen zur [Angabe bestimmter Module](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-project-maven.html#modules-dependencies) und setzen Sie den `artifactId` Wert auf. `aws-java-sdk-kms`
+ Um eine Abhängigkeit nur für das AWS KMS Modul in AWS SDK für Java 2.x zu erstellen, folgen Sie den Anweisungen zur [Angabe bestimmter](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup-project-maven.html#modules-dependencies) Module. Stellen Sie „`groupId`bis“ `software.amazon.awssdk` und „`artifactId`Bis`kms`“ ein.
Weitere Änderungen finden Sie unter [Was ist der Unterschied zwischen AWS SDK für Java 1.x und 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/migration-whats-different.html) im AWS SDK for Java 2.x Entwicklerhandbuch.  
In den Java-Beispielen im AWS Encryption SDK Developer Guide wird der verwendet. AWS SDK for Java 2.x

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

Installieren Sie die neueste Version der AWS-Verschlüsselungs-SDK for Java.

**Anmerkung**  
Alle AWS-Verschlüsselungs-SDK for Java Versionen vor 2.0.0 befinden sich in der [end-of-supportPhase](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle).  
Sie können sicher von Version 2.0 aus aktualisieren. *x* und höher auf die neueste Version von AWS-Verschlüsselungs-SDK for Java ohne Code- oder Datenänderungen. In Version 2.0 wurden jedoch [neue Sicherheitsfunktionen](about-versions.md#version-2) eingeführt. *x* sind nicht abwärtskompatibel. Um von Versionen vor 1.7 zu aktualisieren. *x* auf Version 2.0. *x* und höher, Sie müssen zuerst auf die neueste Version 1 aktualisieren. *x-Version* von AWS Encryption SDK. Details hierzu finden Sie unter [Migrieren Sie Ihre AWS Encryption SDK](migration.md).

Sie können das AWS-Verschlüsselungs-SDK for Java auf folgende Weise installieren.

**manuell**  
Um das [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/) GitHubRepository zu installieren AWS-Verschlüsselungs-SDK for Java, klonen oder laden Sie es herunter.

**Verwenden von Apache Maven**  
Das AWS-Verschlüsselungs-SDK for Java ist über [Apache Maven](https://maven.apache.org/) mit der folgenden Abhängigkeitsdefinition verfügbar.  

```
<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-encryption-sdk-java</artifactId>
  <version>3.0.0</version>
</dependency>
```

Nachdem Sie das SDK installiert haben, schauen Sie sich zunächst den [Java-Beispielcode](java-example-code.md) in diesem Handbuch und das [Javadoc](https://aws.github.io/aws-encryption-sdk-java/) an. GitHub

# AWS-Verschlüsselungs-SDK for Java Beispiele
<a name="java-example-code"></a>

Die folgenden Beispiele zeigen Ihnen, wie Sie mit AWS-Verschlüsselungs-SDK for Java dem Daten ver- und entschlüsseln können. Diese Beispiele zeigen, wie Version 3 verwendet wird. *x* und später von AWS-Verschlüsselungs-SDK for Java. Version 3. *x* von AWS-Verschlüsselungs-SDK for Java benötigt die AWS SDK for Java 2.x. Version 3. *x* von AWS-Verschlüsselungs-SDK for Java ersetzt die [Hauptschlüsselanbieter](concepts.md#master-key-provider) durch [Schlüsselringe](concepts.md#keyring). Beispiele, die frühere Versionen verwenden, finden Sie in der [Release-Liste](https://github.com/aws/aws-encryption-sdk-java/releases) des [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/)Repositorys unter GitHub.

**Topics**
+ [Zeichenfolgen](#java-example-strings)
+ [Byte-Streams](#java-example-streams)
+ [Bytestreams mit mehreren Master-Key-Anbietern](#java-example-multiple-providers)

## Verschlüsseln und Entschlüsseln von Zeichenfolgen
<a name="java-example-strings"></a>

Das folgende Beispiel zeigt Ihnen, wie Sie Version 3 verwenden. *x* der AWS-Verschlüsselungs-SDK for Java zum Verschlüsseln und Entschlüsseln von Zeichenketten. Bevor Sie die Zeichenfolge verwenden, konvertieren Sie sie in ein Byte-Array.

[In diesem Beispiel wird ein AWS KMS Schlüsselbund verwendet.](use-kms-keyring.md) Wenn Sie mit einem AWS KMS Schlüsselbund verschlüsseln, können Sie eine Schlüssel-ID, einen Schlüssel-ARN, einen Aliasnamen oder einen Alias-ARN verwenden, um die KMS-Schlüssel zu identifizieren. Beim Entschlüsseln müssen Sie einen Schlüssel-ARN verwenden, um KMS-Schlüssel zu identifizieren.

Wenn Sie die `encryptData()`-Methode aufrufen, wird eine [verschlüsselte Nachricht](concepts.md#message) (`CryptoResult`) zurückgegeben, die den Verschlüsselungstext, die verschlüsselten Datenschlüssel und den Verschlüsselungskontext enthält. Wenn Sie `CryptoResult` auf dem `getResult`-Objekt aufrufen, gibt es eine Base-64-codierte Zeichenfolgenversion der [verschlüsselten Nachricht](message-format.md) zurück, die Sie an die `decryptData()`-Methode übergeben können.

In ähnlicher Weise enthält das `decryptData()` zurückgegebene `CryptoResult` Objekt beim Aufrufen die Klartextnachricht und eine AWS KMS key ID. Bevor Ihre Anwendung den Klartext zurückgibt, stellen Sie sicher, dass die AWS KMS key ID und der Verschlüsselungskontext in der verschlüsselten Nachricht den Erwartungen entsprechen.

```
// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package com.amazonaws.crypto.keyrings;

import com.amazonaws.encryptionsdk.AwsCrypto;
import com.amazonaws.encryptionsdk.CommitmentPolicy;
import com.amazonaws.encryptionsdk.CryptoResult;
import software.amazon.cryptography.materialproviders.IKeyring;
import software.amazon.cryptography.materialproviders.MaterialProviders;
import software.amazon.cryptography.materialproviders.model.CreateAwsKmsMultiKeyringInput;
import software.amazon.cryptography.materialproviders.model.MaterialProvidersConfig;

import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;

/**
 * Encrypts and then decrypts data using an AWS KMS Keyring.
 *
 * <p>Arguments:
 *
 * <ol>
 *   <li>Key ARN: For help finding the Amazon Resource Name (ARN) of your AWS KMS customer master
 *       key (CMK), see 'Viewing Keys' at
 *       http://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html
 * </ol>
 */
public class BasicEncryptionKeyringExample {

  private static final byte[] EXAMPLE_DATA = "Hello World".getBytes(StandardCharsets.UTF_8);

  public static void main(final String[] args) {
    final String keyArn = args[0];

    encryptAndDecryptWithKeyring(keyArn);
  }

  public static void encryptAndDecryptWithKeyring(final String keyArn) {
    // 1. Instantiate the SDK
    // This builds the AwsCrypto client with the RequireEncryptRequireDecrypt commitment policy,
    // which means this client only encrypts using committing algorithm suites and enforces
    // that the client will only decrypt encrypted messages that were created with a committing
    // algorithm suite.
    // This is the default commitment policy if you build the client with
    // `AwsCrypto.builder().build()`
    // or `AwsCrypto.standard()`.
    final AwsCrypto crypto =
        AwsCrypto.builder()
            .withCommitmentPolicy(CommitmentPolicy.RequireEncryptRequireDecrypt)
            .build();

    // 2. Create the AWS KMS keyring.
    // This example creates a multi keyring, which automatically creates the KMS client.
    final MaterialProviders materialProviders =
        MaterialProviders.builder()
            .MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
            .build();
    final CreateAwsKmsMultiKeyringInput keyringInput =
        CreateAwsKmsMultiKeyringInput.builder().generator(keyArn).build();
    final IKeyring kmsKeyring = materialProviders.CreateAwsKmsMultiKeyring(keyringInput);

    // 3. Create an encryption context
    // We recommend using an encryption context whenever possible
    // to protect integrity. This sample uses placeholder values.
    // For more information see:
    // blogs.aws.amazon.com/security/post/Tx2LZ6WBJJANTNW/How-to-Protect-the-Integrity-of-Your-Encrypted-Data-by-Using-AWS-Key-Management
    final Map<String, String> encryptionContext =
        Collections.singletonMap("ExampleContextKey", "ExampleContextValue");

    // 4. Encrypt the data
    final CryptoResult<byte[], ?> encryptResult =
        crypto.encryptData(kmsKeyring, EXAMPLE_DATA, encryptionContext);
    final byte[] ciphertext = encryptResult.getResult();

    // 5. Decrypt the data
    final CryptoResult<byte[], ?> decryptResult =
        crypto.decryptData(
            kmsKeyring,
            ciphertext,
            // Verify that the encryption context in the result contains the
            // encryption context supplied to the encryptData method
            encryptionContext);

    // 6. Verify that the decrypted plaintext matches the original plaintext
    assert Arrays.equals(decryptResult.getResult(), EXAMPLE_DATA);
  }
}
```

## Verschlüsseln und Entschlüsseln von Byte-Streams
<a name="java-example-streams"></a>

Das folgende Beispiel zeigt Ihnen, wie Sie AWS Encryption SDK Bytestreams verschlüsseln und entschlüsseln können.

In diesem Beispiel wird ein [Raw AES-Schlüsselbund](use-raw-aes-keyring.md) verwendet.

Bei der Verschlüsselung verwendet dieses Beispiel die `AwsCrypto.builder() .withEncryptionAlgorithm()` Methode, um eine Algorithmussuite ohne [digitale](concepts.md#digital-sigs) Signaturen anzugeben. Bei der Entschlüsselung wird in diesem Beispiel die Methode verwendet, um sicherzustellen, dass der Chiffretext nicht signiert ist. `createUnsignedMessageDecryptingStream()` Die `createUnsignedMessageDecryptingStream()` Methode schlägt fehl, wenn sie auf einen Chiffretext mit einer digitalen Signatur trifft. 

Wenn Sie mit der Standard-Algorithmus-Suite verschlüsseln, die digitale Signaturen enthält, verwenden Sie stattdessen die `createDecryptingStream()` Methode, wie im nächsten Beispiel gezeigt.

```
// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package com.amazonaws.crypto.keyrings;

import com.amazonaws.encryptionsdk.AwsCrypto;
import com.amazonaws.encryptionsdk.CommitmentPolicy;
import com.amazonaws.encryptionsdk.CryptoAlgorithm;
import com.amazonaws.encryptionsdk.CryptoInputStream;
import com.amazonaws.encryptionsdk.jce.JceMasterKey;
import com.amazonaws.util.IOUtils;
import software.amazon.cryptography.materialproviders.IKeyring;
import software.amazon.cryptography.materialproviders.MaterialProviders;
import software.amazon.cryptography.materialproviders.model.AesWrappingAlg;
import software.amazon.cryptography.materialproviders.model.CreateRawAesKeyringInput;
import software.amazon.cryptography.materialproviders.model.MaterialProvidersConfig;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.security.SecureRandom;
import java.util.Collections;
import java.util.Map;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;


/**
 * <p>
 * Encrypts and then decrypts a file under a random key.
 *
 * <p>
 * Arguments:
 * <ol>
 * <li>Name of file containing plaintext data to encrypt
 * </ol>
 *
 * <p>
 * This program demonstrates using a standard Java {@link SecretKey} object as a {@link IKeyring} to
 * encrypt and decrypt streaming data.
 */
public class FileStreamingKeyringExample {
    private static String srcFile;

    public static void main(String[] args) throws IOException {
        srcFile = args[0];

        // In this example, we generate a random key. In practice, 
        // you would get a key from an existing store
        SecretKey cryptoKey = retrieveEncryptionKey();

        // Create a Raw Aes Keyring using the random key and an AES-GCM encryption algorithm
        final MaterialProviders materialProviders = MaterialProviders.builder()
                .MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
                .build();
        final CreateRawAesKeyringInput keyringInput = CreateRawAesKeyringInput.builder()
                .wrappingKey(ByteBuffer.wrap(cryptoKey.getEncoded()))
                .keyNamespace("Example")
                .keyName("RandomKey")
                .wrappingAlg(AesWrappingAlg.ALG_AES128_GCM_IV12_TAG16)
                .build();
        IKeyring keyring = materialProviders.CreateRawAesKeyring(keyringInput);

        // Instantiate the SDK.
        // This builds the AwsCrypto client with the RequireEncryptRequireDecrypt commitment policy,
        // which means this client only encrypts using committing algorithm suites and enforces
        // that the client will only decrypt encrypted messages that were created with a committing
        // algorithm suite.
        // This is the default commitment policy if you build the client with
        // `AwsCrypto.builder().build()`
        // or `AwsCrypto.standard()`.
        // This example encrypts with an algorithm suite that doesn't include signing for faster decryption,
        // since this use case assumes that the contexts that encrypt and decrypt are equally trusted.
        final AwsCrypto crypto = AwsCrypto.builder()
                .withCommitmentPolicy(CommitmentPolicy.RequireEncryptRequireDecrypt)
                .withEncryptionAlgorithm(CryptoAlgorithm.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY)
                .build();

        // Create an encryption context to identify the ciphertext
        Map<String, String> context = Collections.singletonMap("Example", "FileStreaming");

        // Because the file might be too large to load into memory, we stream the data, instead of 
        //loading it all at once.
        FileInputStream in = new FileInputStream(srcFile);
        CryptoInputStream<JceMasterKey> encryptingStream = crypto.createEncryptingStream(keyring, in, context);

        FileOutputStream out = new FileOutputStream(srcFile + ".encrypted");
        IOUtils.copy(encryptingStream, out);
        encryptingStream.close();
        out.close();

        // Decrypt the file. Verify the encryption context before returning the plaintext.
        // Since the data was encrypted using an unsigned algorithm suite, use the recommended
        // createUnsignedMessageDecryptingStream method, which only accepts unsigned messages.
        in = new FileInputStream(srcFile + ".encrypted");
        CryptoInputStream<JceMasterKey> decryptingStream = crypto.createUnsignedMessageDecryptingStream(keyring, in);
        // Does it contain the expected encryption context?
        if (!"FileStreaming".equals(decryptingStream.getCryptoResult().getEncryptionContext().get("Example"))) {
            throw new IllegalStateException("Bad encryption context");
        }

        // Write the plaintext data to disk.
        out = new FileOutputStream(srcFile + ".decrypted");
        IOUtils.copy(decryptingStream, out);
        decryptingStream.close();
        out.close();
    }

    /**
     * In practice, this key would be saved in a secure location.
     * For this demo, we generate a new random key for each operation.
     */
    private static SecretKey retrieveEncryptionKey() {
        SecureRandom rnd = new SecureRandom();
        byte[] rawKey = new byte[16]; // 128 bits
        rnd.nextBytes(rawKey);
        return new SecretKeySpec(rawKey, "AES");
    }
}
```

## Verschlüsseln und Entschlüsseln von Bytestreams mit einem Mehrfachschlüsselbund
<a name="java-example-multiple-providers"></a>

Das folgende Beispiel zeigt Ihnen, wie Sie den AWS Encryption SDK mit einem [Mehrfachschlüsselbund](use-multi-keyring.md) verwenden. Wenn Sie einen Multi-Schlüsselbund verwenden, um Daten zu verschlüsseln, können alle Umhüllungsschlüssel in einem seiner Schlüsselbunde diese Daten entschlüsseln. In diesem Beispiel werden ein [AWS KMS Schlüsselbund](use-kms-keyring.md) und ein [Raw RSA-Schlüsselbund als untergeordnete Schlüsselanhänger](use-raw-rsa-keyring.md) verwendet.

[In diesem Beispiel wird mit der [Standard-Algorithmussuite](supported-algorithms.md) verschlüsselt, die eine digitale Signatur enthält.](concepts.md#digital-sigs) Beim Streaming AWS Encryption SDK gibt der Klartext nach Integritätsprüfungen, aber bevor die digitale Signatur verifiziert wurde, frei. Um zu vermeiden, dass der Klartext verwendet wird, bis die Signatur verifiziert ist, puffert dieses Beispiel den Klartext und schreibt ihn erst auf die Festplatte, wenn die Entschlüsselung und Überprüfung abgeschlossen sind. 

```
// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package com.amazonaws.crypto.keyrings;

import com.amazonaws.encryptionsdk.AwsCrypto;
import com.amazonaws.encryptionsdk.CommitmentPolicy;
import com.amazonaws.encryptionsdk.CryptoOutputStream;
import com.amazonaws.util.IOUtils;
import software.amazon.cryptography.materialproviders.IKeyring;
import software.amazon.cryptography.materialproviders.MaterialProviders;
import software.amazon.cryptography.materialproviders.model.CreateAwsKmsMultiKeyringInput;
import software.amazon.cryptography.materialproviders.model.CreateMultiKeyringInput;
import software.amazon.cryptography.materialproviders.model.CreateRawRsaKeyringInput;
import software.amazon.cryptography.materialproviders.model.MaterialProvidersConfig;
import software.amazon.cryptography.materialproviders.model.PaddingScheme;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.security.GeneralSecurityException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Collections;

/**
 * <p>
 * Encrypts a file using both AWS KMS Key and an asymmetric key pair.
 *
 * <p>
 * Arguments:
 * <ol>
 * <li>Key ARN: For help finding the Amazon Resource Name (ARN) of your AWS KMS key,
 *   see 'Viewing Keys' at http://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html
 *
 * <li>Name of file containing plaintext data to encrypt
 * </ol>
 * <p>
 * You might use AWS Key Management Service (AWS KMS) for most encryption and decryption operations, but
 * still want the option of decrypting your data offline independently of AWS KMS. This sample
 * demonstrates one way to do this.
 * <p>
 * The sample encrypts data under both an AWS KMS key and an "escrowed" RSA key pair
 * so that either key alone can decrypt it. You might commonly use the AWS KMS key for decryption. However,
 * at any time, you can use the private RSA key to decrypt the ciphertext independent of AWS KMS.
 * <p>
 * This sample uses the RawRsaKeyring to generate a RSA public-private key pair
 * and saves the key pair in memory. In practice, you would store the private key in a secure offline
 * location, such as an offline HSM, and distribute the public key to your development team.
 */
public class EscrowedEncryptKeyringExample {
    private static ByteBuffer publicEscrowKey;
    private static ByteBuffer privateEscrowKey;

    public static void main(final String[] args) throws Exception {
        // This sample generates a new random key for each operation.
        // In practice, you would distribute the public key and save the private key in secure
        // storage.
        generateEscrowKeyPair();

        final String kmsArn = args[0];
        final String fileName = args[1];

        standardEncrypt(kmsArn, fileName);
        standardDecrypt(kmsArn, fileName);

        escrowDecrypt(fileName);
    }

    private static void standardEncrypt(final String kmsArn, final String fileName) throws Exception {
        // Encrypt with the KMS key and the escrowed public key
        // 1. Instantiate the SDK
        // This builds the AwsCrypto client with the RequireEncryptRequireDecrypt commitment policy,
        // which means this client only encrypts using committing algorithm suites and enforces
        // that the client will only decrypt encrypted messages that were created with a committing
        // algorithm suite.
        // This is the default commitment policy if you build the client with
        // `AwsCrypto.builder().build()`
        // or `AwsCrypto.standard()`.
        final AwsCrypto crypto = AwsCrypto.builder()
                .withCommitmentPolicy(CommitmentPolicy.RequireEncryptRequireDecrypt)
                .build();

        // 2. Create the AWS KMS keyring.
        // This example creates a multi keyring, which automatically creates the KMS client.
        final MaterialProviders matProv = MaterialProviders.builder()
                .MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
                .build();
        final CreateAwsKmsMultiKeyringInput keyringInput = CreateAwsKmsMultiKeyringInput.builder()
                .generator(kmsArn)
                .build();
        IKeyring kmsKeyring = matProv.CreateAwsKmsMultiKeyring(keyringInput);

        // 3. Create the Raw Rsa Keyring with Public Key.
        final CreateRawRsaKeyringInput encryptingKeyringInput = CreateRawRsaKeyringInput.builder()
                .keyName("Escrow")
                .keyNamespace("Escrow")
                .paddingScheme(PaddingScheme.OAEP_SHA512_MGF1)
                .publicKey(publicEscrowKey)
                .build();
        IKeyring rsaPublicKeyring = matProv.CreateRawRsaKeyring(encryptingKeyringInput);

        // 4. Create the multi-keyring.
        final CreateMultiKeyringInput createMultiKeyringInput = CreateMultiKeyringInput.builder()
                .generator(kmsKeyring)
                .childKeyrings(Collections.singletonList(rsaPublicKeyring))
                .build();
        IKeyring multiKeyring = matProv.CreateMultiKeyring(createMultiKeyringInput);

        // 5. Encrypt the file
        // To simplify this code example, we omit the encryption context. Production code should always 
        // use an encryption context. 
        final FileInputStream in = new FileInputStream(fileName);
        final FileOutputStream out = new FileOutputStream(fileName + ".encrypted");
        final CryptoOutputStream<?> encryptingStream = crypto.createEncryptingStream(multiKeyring, out);

        IOUtils.copy(in, encryptingStream);
        in.close();
        encryptingStream.close();
    }

    private static void standardDecrypt(final String kmsArn, final String fileName) throws Exception {
        // Decrypt with the AWS KMS key and the escrow public key. 

        // 1. Instantiate the SDK.
        // This builds the AwsCrypto client with the RequireEncryptRequireDecrypt commitment policy,
        // which means this client only encrypts using committing algorithm suites and enforces
        // that the client will only decrypt encrypted messages that were created with a committing
        // algorithm suite.
        // This is the default commitment policy if you build the client with
        // `AwsCrypto.builder().build()`
        // or `AwsCrypto.standard()`.
        final AwsCrypto crypto = AwsCrypto.builder()
                .withCommitmentPolicy(CommitmentPolicy.RequireEncryptRequireDecrypt)
                .build();

        // 2. Create the AWS KMS keyring.
        // This example creates a multi keyring, which automatically creates the KMS client.
        final MaterialProviders matProv = MaterialProviders.builder()
                .MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
                .build();
        final CreateAwsKmsMultiKeyringInput keyringInput = CreateAwsKmsMultiKeyringInput.builder()
                .generator(kmsArn)
                .build();
        IKeyring kmsKeyring = matProv.CreateAwsKmsMultiKeyring(keyringInput);

        // 3. Create the Raw Rsa Keyring with Public Key.
        final CreateRawRsaKeyringInput encryptingKeyringInput = CreateRawRsaKeyringInput.builder()
                .keyName("Escrow")
                .keyNamespace("Escrow")
                .paddingScheme(PaddingScheme.OAEP_SHA512_MGF1)
                .publicKey(publicEscrowKey)
                .build();
        IKeyring rsaPublicKeyring = matProv.CreateRawRsaKeyring(encryptingKeyringInput);

        // 4. Create the multi-keyring.
        final CreateMultiKeyringInput createMultiKeyringInput = CreateMultiKeyringInput.builder()
                .generator(kmsKeyring)
                .childKeyrings(Collections.singletonList(rsaPublicKeyring))
                .build();
        IKeyring multiKeyring = matProv.CreateMultiKeyring(createMultiKeyringInput);

        // 5. Decrypt the file
        // To simplify this code example, we omit the encryption context. Production code should always 
        // use an encryption context. 
        final FileInputStream in = new FileInputStream(fileName + ".encrypted");
        final FileOutputStream out = new FileOutputStream(fileName + ".decrypted");
        // Since we are using a signing algorithm suite, we avoid streaming decryption directly to the output file,
        // to ensure that the trailing signature is verified before writing any untrusted plaintext to disk.
        final ByteArrayOutputStream plaintextBuffer = new ByteArrayOutputStream();
        final CryptoOutputStream<?> decryptingStream = crypto.createDecryptingStream(multiKeyring, plaintextBuffer);
        IOUtils.copy(in, decryptingStream);
        in.close();
        decryptingStream.close();
        final ByteArrayInputStream plaintextReader = new ByteArrayInputStream(plaintextBuffer.toByteArray());
        IOUtils.copy(plaintextReader, out);
        out.close();
    }

    private static void escrowDecrypt(final String fileName) throws Exception {
        // You can decrypt the stream using only the private key.
        // This method does not call AWS KMS.

        // 1. Instantiate the SDK
        final AwsCrypto crypto = AwsCrypto.standard();

        // 2. Create the Raw Rsa Keyring with Private Key.
        final MaterialProviders matProv = MaterialProviders.builder()
                .MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
                .build();
        final CreateRawRsaKeyringInput encryptingKeyringInput = CreateRawRsaKeyringInput.builder()
                .keyName("Escrow")
                .keyNamespace("Escrow")
                .paddingScheme(PaddingScheme.OAEP_SHA512_MGF1)
                .publicKey(publicEscrowKey)
                .privateKey(privateEscrowKey)
                .build();
        IKeyring escrowPrivateKeyring = matProv.CreateRawRsaKeyring(encryptingKeyringInput);


        // 3. Decrypt the file
        // To simplify this code example, we omit the encryption context. Production code should always 
        // use an encryption context. 
        final FileInputStream in = new FileInputStream(fileName + ".encrypted");
        final FileOutputStream out = new FileOutputStream(fileName + ".deescrowed");
        final CryptoOutputStream<?> decryptingStream = crypto.createDecryptingStream(escrowPrivateKeyring, out);
        IOUtils.copy(in, decryptingStream);
        in.close();
        decryptingStream.close();

    }

    private static void generateEscrowKeyPair() throws GeneralSecurityException {
        final KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA");
        kg.initialize(4096); // Escrow keys should be very strong
        final KeyPair keyPair = kg.generateKeyPair();
        publicEscrowKey = RawRsaKeyringExample.getPEMPublicKey(keyPair.getPublic());
        privateEscrowKey = RawRsaKeyringExample.getPEMPrivateKey(keyPair.getPrivate());

    }
}
```

# AWS-Verschlüsselungs-SDK for JavaScript
<a name="javascript"></a>

Die wurde AWS-Verschlüsselungs-SDK for JavaScript entwickelt, um Entwicklern, die Webbrowseranwendungen in Node.js JavaScript oder Webserveranwendungen schreiben, eine clientseitige Verschlüsselungsbibliothek zur Verfügung zu stellen.

Wie alle Implementierungen von AWS-Verschlüsselungs-SDK for JavaScript bietet sie erweiterte Datenschutzfunktionen. AWS Encryption SDK Dazu gehören die [Envelope-Verschlüsselung](concepts.md#envelope-encryption), zusätzliche authentifizierte Daten (AAD) und [Algorithmen-Pakete](concepts.md#crypto-algorithm) mit sicherem, authentifiziertem, symmetrischem Schlüssel, wie z. B. 256-Bit-AES-GCM mit Schlüsselableitung und Signatur.

Alle sprachspezifischen Implementierungen von AWS Encryption SDK sind so konzipiert, dass sie interoperabel sind und den Einschränkungen der Sprache unterliegen. Einzelheiten zu den Spracheinschränkungen für finden Sie unter. JavaScript [Kompatibilität der AWS-Verschlüsselungs-SDK for JavaScript](javascript-compatibility.md)

**Weitere Informationen**
+ Einzelheiten zur Programmierung mit dem AWS-Verschlüsselungs-SDK for JavaScript finden Sie im [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)Repository unter GitHub.
+ Programmierbeispiele finden Sie unter [AWS-Verschlüsselungs-SDK for JavaScript Beispiele](js-examples.md) und in den Modulen [example-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-browser) und [example-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-node) im Repository. [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/) 
+  Ein Beispiel aus der Praxis für die Verwendung von AWS-Verschlüsselungs-SDK for JavaScript zum Verschlüsseln von Daten in einer Webanwendung finden Sie im Sicherheitsblog unter [How to enable encryption in a browser with](https://aws.amazon.com/blogs/security/how-to-enable-encryption-browser-aws-encryption-sdk-javascript-node-js/) the and Node.js. AWS-Verschlüsselungs-SDK for JavaScript AWS 

**Topics**
+ [Kompatibilität](javascript-compatibility.md)
+ [Installation](javascript-installation.md)
+ [Module](javascript-modules.md)
+ [Beispiele](js-examples.md)

# Kompatibilität der AWS-Verschlüsselungs-SDK for JavaScript
<a name="javascript-compatibility"></a>

Das AWS-Verschlüsselungs-SDK for JavaScript ist so konzipiert, dass es mit anderen Sprachimplementierungen von interoperabel ist. AWS Encryption SDK[In den meisten Fällen können Sie Daten mit der verschlüsseln AWS-Verschlüsselungs-SDK for JavaScript und mit jeder anderen Sprachimplementierung entschlüsseln, einschließlich der AWS Encryption SDK Befehlszeilenschnittstelle.](crypto-cli.md) Und Sie können das verwenden, um [verschlüsselte Nachrichten AWS-Verschlüsselungs-SDK for JavaScript](concepts.md#message) zu entschlüsseln, die von anderen Sprachimplementierungen von erzeugt wurden. AWS Encryption SDK

Wenn Sie das AWS-Verschlüsselungs-SDK for JavaScript verwenden, müssen Sie sich jedoch einiger Kompatibilitätsprobleme in der JavaScript Sprachimplementierung und in Webbrowsern bewusst sein.

Wenn Sie verschiedene Sprachimplementierungen verwenden, sollten Sie außerdem darauf achten, kompatible Hauptschlüsselanbieter, Hauptschlüssel und Schlüsselringe zu konfigurieren. Details hierzu finden Sie unter [Schlüsselbund-Kompatibilität](choose-keyring.md#keyring-compatibility).

## AWS-Verschlüsselungs-SDK for JavaScript Kompatibilität
<a name="javascript-language-compatibility"></a>

Die JavaScript Implementierung von AWS Encryption SDK unterscheidet sich von anderen Sprachimplementierungen in folgenden Punkten:
+ Der Verschlüsselungsvorgang von AWS-Verschlüsselungs-SDK for JavaScript gibt keinen Chiffretext ohne Frame zurück. Der entschlüsselt jedoch gerahmten und ungerahmten Chiffretext, der von anderen Sprachimplementierungen von zurückgegeben AWS-Verschlüsselungs-SDK for JavaScript wird. AWS Encryption SDK
+ Ab Node.js-Version 12.9.0 unterstützt Node.js die folgenden RSA-Schlüsselumhüllungsoptionen:
  + OAEP mit,, oder SHA1 SHA256 SHA384 SHA512
  + OAEP mit und mit SHA1 MGF1 SHA1
  + PKCS1v15
+ Vor Version 12.9.0 unterstützt Node.js nur die folgenden RSA-Schlüsselumhüllungsoptionen:
  + OAEP mit und mit SHA1 MGF1 SHA1
  + PKCS1v15

## Browserkompatibilität
<a name="javascript-browser-compatibility"></a>

Einige Webbrowser unterstützen keine grundlegenden kryptografischen Operationen, die für das AWS-Verschlüsselungs-SDK for JavaScript erforderlich sind. Sie können einige der fehlenden Operationen ausgleichen, indem Sie einen Fallback für die WebCrypto API konfigurieren, die der Browser implementiert.

**Webbrowser-Einschränkungen**

Die folgenden Einschränkungen gelten für alle Webbrowser:
+ Die WebCrypto API unterstützt das Umschließen von PKCS1v15 Schlüsseln nicht.
+ Browser unterstützen keine 192-Bit-Schlüssel.

**Erforderliche kryptografische Operationen**

Das AWS-Verschlüsselungs-SDK for JavaScript erfordert die folgenden Operationen in Webbrowsern. Wenn ein Browser diese Operationen nicht unterstützt, ist er nicht mit dem AWS-Verschlüsselungs-SDK for JavaScript kompatibel.
+ Der Browser muss `crypto.getRandomValues()` enthalten, was eine Methode zum Generieren kryptografisch zufälliger Werte ist. Informationen zu den unterstützten `crypto.getRandomValues()` Webbrowser-Versionen finden Sie unter [Kann ich Krypto verwenden. getRandomValues()?](https://caniuse.com/#feat=getrandomvalues) .

**Erforderlicher Fallback**

Das AWS-Verschlüsselungs-SDK for JavaScript erfordert die folgenden Bibliotheken und Operationen in Webbrowsern. Wenn Sie einen Webbrowser unterstützen, der diese Anforderungen nicht erfüllt, müssen Sie einen Fallback konfigurieren. Andernfalls schlagen Versuche fehl, das AWS-Verschlüsselungs-SDK for JavaScript mit dem Browser zu verwenden.
+ Die WebCrypto API, die grundlegende kryptografische Operationen in Webanwendungen ausführt, ist nicht für alle Browser verfügbar. Weitere Informationen zu den Webbrowser-Versionen, die Web-Kryptografie unterstützen, finden Sie unter [Kann ich Web-Kryptografie verwenden?](https://caniuse.com/#feat=cryptography).
+ Moderne Versionen des Safari-Webbrowsers unterstützen keine AES-GCM-Verschlüsselung von Null Byte, was erforderlich ist. AWS Encryption SDK Wenn der Browser die WebCrypto API implementiert, AES-GCM aber nicht zum Verschlüsseln von Null Byte verwenden kann, AWS-Verschlüsselungs-SDK for JavaScript verwendet er die Fallback-Bibliothek nur für die Null-Byte-Verschlüsselung. Er verwendet die API für alle anderen Operationen. WebCrypto 

Um einen Fallback für eine der Einschränkungen zu konfigurieren, fügen Sie die folgenden Anweisungen zu Ihrem Code hinzu. Geben Sie in der Funktion [configureFallback](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/web-crypto-backend/src/backend-factory.ts#L78) eine Bibliothek an, die die fehlenden Funktionen unterstützt. Im folgenden Beispiel wird die Microsoft Research JavaScript Cryptography Library (`msrcrypto`) verwendet, Sie können sie jedoch durch eine kompatible Bibliothek ersetzen. Ein vollständiges Beispiel finden Sie unter [fallback.ts](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/example-browser/src/fallback.ts).

```
import { configureFallback } from '@aws-crypto/client-browser'
configureFallback(msrCrypto)
```

# Installation des AWS-Verschlüsselungs-SDK for JavaScript
<a name="javascript-installation"></a>

Das AWS-Verschlüsselungs-SDK for JavaScript besteht aus einer Sammlung voneinander abhängiger Module. Einige der Module sind nur Sammlungen von Modulen, die für die Zusammenarbeit konzipiert sind. Einige Module sind so konzipiert, dass sie unabhängig voneinander arbeiten. Für alle Implementierungen sind einige Module erforderlich, einige andere werden nur für spezielle Fälle benötigt. Informationen zu den Modulen im Verzeichnis finden Sie unter [Module in der AWS-Verschlüsselungs-SDK for JavaScript](javascript-modules.md) und die `README.md` Datei in den einzelnen Modulen im [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules)Projektarchiv unter GitHub. AWS Encryption SDK JavaScript

**Anmerkung**  
Alle AWS-Verschlüsselungs-SDK for JavaScript Versionen vor 2.0.0 befinden sich in der [end-of-supportPhase](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle).  
Sie können sicher von Version 2.0 aus aktualisieren. *x* und höher auf die neueste Version von AWS-Verschlüsselungs-SDK for JavaScript ohne Code- oder Datenänderungen. In Version 2.0 wurden jedoch [neue Sicherheitsfunktionen](about-versions.md#version-2) eingeführt. *x* sind nicht abwärtskompatibel. Um von Versionen vor 1.7 zu aktualisieren. *x* auf Version 2.0. *x* und höher, Sie müssen zuerst auf die neueste Version 1 aktualisieren. *x-Version* von AWS-Verschlüsselungs-SDK for JavaScript. Details hierzu finden Sie unter [Migrieren Sie Ihre AWS Encryption SDK](migration.md).

Um die Module zu installieren, verwenden Sie den [npm-Paketmanager](https://www.npmjs.com/get-npm). 

Verwenden Sie beispielsweise den folgenden Befehl, um das `client-node` Modul zu installieren, das alle Module enthält, die Sie mit der AWS-Verschlüsselungs-SDK for JavaScript Datei Node.js programmieren müssen. 

```
npm install @aws-crypto/client-node
```

Verwenden Sie den folgenden Befehl, um das `client-browser` Modul zu installieren, das alle Module enthält, mit denen Sie AWS-Verschlüsselungs-SDK for JavaScript im Browser programmieren müssen. 

```
npm install @aws-crypto/client-browser
```

Praktische Beispiele für die AWS-Verschlüsselungs-SDK for JavaScript Verwendung von finden Sie in den Beispielen unter `example-node` und in den `example-browser` Modulen im [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)Repository unter GitHub.

# Module in der AWS-Verschlüsselungs-SDK for JavaScript
<a name="javascript-modules"></a>

Die Module im AWS-Verschlüsselungs-SDK for JavaScript machen es einfach, den Code zu installieren, den Sie für Ihre Projekte benötigen.

## Module für JavaScript Node.js
<a name="jsn-modules-node"></a>

[client-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/client-node)  
Enthält alle Module, mit denen Sie AWS-Verschlüsselungs-SDK for JavaScript in Node.js programmieren müssen.

[caching-materials-manager-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/caching-materials-manager-node)  
Exportiert Funktionen, die die Funktion [zum Zwischenspeichern von Datenschlüsseln](data-key-caching.md) AWS-Verschlüsselungs-SDK for JavaScript in Node.js unterstützen. 

[decrypt-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/decrypt-node)  
Exportiert Funktionen, die verschlüsselte Nachrichten entschlüsseln und verifizieren, die Daten und Datenströme darstellen. Im `client-node`-Modul enthalten.

[encrypt-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/encrypt-node)  
Exportiert Funktionen, die verschiedene Datentypen verschlüsseln und signieren. Im `client-node`-Modul enthalten.

[example-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-node)  
Exportiert funktionierende Beispiele für die Programmierung mit dem AWS-Verschlüsselungs-SDK for JavaScript in Node.js. Enthält ein Beispiel für verschiedene Arten von Schlüsselbunden und verschiedene Arten von Daten.

[hkdf-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/hkdf-node)  
Exportiert eine [HMAC-basierte Key Derivation Function](https://en.wikipedia.org/wiki/HKDF) (HKDF), die AWS-Verschlüsselungs-SDK for JavaScript in Node.js in bestimmten Algorithmus-Suites verwendet wird. Die AWS-Verschlüsselungs-SDK for JavaScript im Browser verwendet die native HKDF-Funktion in der API. WebCrypto 

[integration-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/integration-node)  
Definiert Tests, die überprüfen, ob die AWS-Verschlüsselungs-SDK for JavaScript in Node.js enthaltene Datei mit anderen Sprachimplementierungen von kompatibel ist. AWS Encryption SDK

[kms-keyring-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/kms-keyring-node)  
Exportiert Funktionen, die AWS KMS Schlüsselringe in Node.js unterstützen.

[raw-aes-keyring-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-aes-keyring-node)  
Exportiert Funktionen, die [Unformatierte AES-Schlüsselbunde](use-raw-aes-keyring.md) in Node.js unterstützen.

[raw-rsa-keyring-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-rsa-keyring-node)  
Exportiert Funktionen, die [Unformatierte RSA-Schlüsselbunde](use-raw-rsa-keyring.md) in Node.js unterstützen.

## Module für Browser JavaScript
<a name="jsn-modules-browser"></a>

[client-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/client-browser)  
Enthält alle Module, mit denen Sie AWS-Verschlüsselungs-SDK for JavaScript im Browser programmieren müssen.

[caching-materials-manager-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/caching-materials-manager-browser)  
Exportiert Funktionen, die die Funktion zum [Zwischenspeichern von Datenschlüsseln](data-key-caching.md) JavaScript im Browser unterstützen.

[decrypt-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/decrypt-browser)  
Exportiert Funktionen, die verschlüsselte Nachrichten entschlüsseln und verifizieren, die Daten und Datenströme darstellen.

[encrypt-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/encrypt-browser)  
Exportiert Funktionen, die verschiedene Datentypen verschlüsseln und signieren. 

[example-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-browser)  
Arbeitsbeispiele für die Programmierung mit dem AWS-Verschlüsselungs-SDK for JavaScript im Browser. Enthält Beispiele für verschiedene Arten von Schlüsselbunden und verschiedene Arten von Daten.

[integration-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/integration-browser)  
Definiert Tests, die überprüfen, ob das AWS-Verschlüsselungs-SDK for Java Skript im Browser mit anderen Sprachimplementierungen von kompatibel ist. AWS Encryption SDK

[kms-keyring-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/kms-keyring-browser)  
Exportiert Funktionen, die [AWS KMS Schlüsselringe](use-kms-keyring.md) im Browser unterstützen.

[raw-aes-keyring-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-aes-keyring-browser)  
Exportiert Funktionen, die [Unformatierte AES-Schlüsselbunde](use-raw-aes-keyring.md) im Browser unterstützen.

[raw-rsa-keyring-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-rsa-keyring-browser)  
Exportiert Funktionen, die [Unformatierte RSA-Schlüsselbunde](use-raw-rsa-keyring.md) im Browser unterstützen.

## Module für alle Implementierungen
<a name="jsn-modules-all"></a>

[cache-material](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/cache-material)  
Unterstützt die [Datenschlüssel-Caching](data-key-caching.md)-Funktion. Stellt Code für die Zusammenstellung der kryptografischen Materialien bereit, die mit jedem Datenschlüssel zwischengespeichert werden.

[kms-keyring](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/kms-keyring)  
Exportiert Funktionen, die [KMS-Schlüsselbunde](use-kms-keyring.md) unterstützen.

[material-management](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/material-management)  
Implementiert den [Manager von kryptographischen Materialien](concepts.md#crypt-materials-manager) (CMM).

[raw-keyring](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-keyring)  
Exportiert Funktionen, die für unformatierte AES- und RSA-Schlüsselbunde erforderlich sind.

[serialize](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/serialize)  
Exportiert Funktionen, die das SDK verwendet, um seine Ausgabe zu serialisieren.

[web-crypto-backend](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/web-crypto-backend)  
Exportiert Funktionen, die die WebCrypto API AWS-Verschlüsselungs-SDK for JavaScript im Browser verwenden.

# AWS-Verschlüsselungs-SDK for JavaScript Beispiele
<a name="js-examples"></a>

Die folgenden Beispiele zeigen Ihnen, wie Sie mit dem AWS-Verschlüsselungs-SDK for JavaScript Daten verschlüsseln und entschlüsseln. 

Weitere Beispiele für die Verwendung der Module AWS-Verschlüsselungs-SDK for JavaScript in den Modulen [example-node und [example-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-browser)](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-node) im Repository finden Sie unter. [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/) GitHub Diese Beispielmodule werden nicht installiert, wenn Sie die Module `client-browser` oder `client-node` installieren.

**Die vollständigen Codebeispiele anzeigen**: Knoten: [kms\$1simple.ts](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/example-node/src/kms_simple.ts), Browser: [kms\$1simple.ts](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/example-browser/src/kms_simple.ts)

**Topics**
+ [

## AWS KMS Daten mit einem Schlüsselbund verschlüsseln
](#javascript-example-encrypt)
+ [

## Daten mit einem Schlüsselbund entschlüsseln AWS KMS
](#javascript-example-decrypt)

## AWS KMS Daten mit einem Schlüsselbund verschlüsseln
<a name="javascript-example-encrypt"></a>

Das folgende Beispiel zeigt Ihnen, wie Sie mit dem eine kurze Zeichenfolge AWS-Verschlüsselungs-SDK for JavaScript oder ein Byte-Array verschlüsseln und entschlüsseln können. 

Dieses Beispiel zeigt einen [AWS KMS Schlüsselbund](use-kms-keyring.md), eine Art von Schlüsselbund, der AWS KMS key zum Generieren und Verschlüsseln von Datenschlüsseln verwendet wird. *Hilfe bei der Erstellung eines AWS KMS key finden Sie unter [Creating Keys im AWS Key Management Service Developer](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) Guide.* Hilfe bei der Identifizierung von AWS KMS keys in einem AWS KMS Schlüsselbund finden Sie unter [Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund](use-kms-keyring.md#kms-keyring-id)

Schritt 1: Legen Sie die Verpflichtungsrichtlinie fest.  
Ab Version 1.7. *x* von AWS-Verschlüsselungs-SDK for JavaScript, Sie können die Commitment-Richtlinie festlegen, wenn Sie die neue `buildClient` Funktion aufrufen, die einen AWS Encryption SDK Client instanziiert. Die `buildClient` Funktion verwendet einen Aufzählungswert, der Ihre Commitment-Richtlinie darstellt. Sie gibt aktualisierte `decrypt` Funktionen `encrypt` und Funktionen zurück, die Ihre Verpflichtungsrichtlinie beim Verschlüsseln und Entschlüsseln durchsetzen.  
In den folgenden Beispielen wird die `buildClient` Funktion verwendet, um die [Standard-Commitment-Richtlinie](migrate-commitment-policy.md) anzugeben,. `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` Sie können die auch verwenden`buildClient`, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter [Beschränkung verschlüsselter Datenschlüssel](configure.md#config-limit-keys).  

```
import {
  KmsKeyringBrowser,
  KMS,
  getClient,
  buildClient,
  CommitmentPolicy,
} from '@aws-crypto/client-browser'

const { encrypt, decrypt } = buildClient(
  CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
```

```
import {
  KmsKeyringNode,
  buildClient,
  CommitmentPolicy,
} from '@aws-crypto/client-node'
                                
const { encrypt, decrypt } = buildClient(
  CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
```

Schritt 2: Konstruieren Sie den Schlüsselbund.  
Erstellen Sie einen AWS KMS Schlüsselbund für die Verschlüsselung.   
Bei der Verschlüsselung mit einem AWS KMS Schlüsselbund müssen Sie einen *Generatorschlüssel* angeben, d. h. einen, der verwendet wird AWS KMS key , um den Klartext-Datenschlüssel zu generieren und zu verschlüsseln. Sie können auch null oder mehr *zusätzliche Schlüssel* angeben, die denselben Klartext-Datenschlüssel verschlüsseln. Der Schlüsselbund gibt den Klartext-Datenschlüssel und eine verschlüsselte Kopie dieses Datenschlüssels für jeden AWS KMS key im Schlüsselbund zurück, einschließlich des Generatorschlüssels. Um die Daten zu entschlüsseln, müssen Sie einen der verschlüsselten Datenschlüssel entschlüsseln.  
Um den Schlüsselbund AWS KMS keys für die Verschlüsselung in der anzugeben AWS-Verschlüsselungs-SDK for JavaScript, können Sie eine [beliebige](use-kms-keyring.md#kms-keyring-id) unterstützte Schlüssel-ID verwenden. AWS KMS In diesem Beispiel wird ein Generatorschlüssel verwendet, der durch seinen [Alias-ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-alias-ARN) identifiziert wird, und ein zusätzlicher Schlüssel, der durch einen [Schlüssel-ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) identifiziert wird.  
Wenn Sie Ihren AWS KMS Schlüsselbund für die Entschlüsselung wiederverwenden möchten, müssen Sie den Schlüssel verwenden, um ihn AWS KMS keys im Schlüsselbund ARNs zu identifizieren.
Bevor Sie diesen Code ausführen, ersetzen Sie die Beispielbezeichner durch gültige AWS KMS key Bezeichner. Sie müssen über die [erforderlichen Berechtigungen verfügen, um die AWS KMS keys im Schlüsselbund zu verwenden](use-kms-keyring.md#kms-keyring-permissions).  
Geben Sie zunächst Ihre Anmeldeinformationen im Browser ein. [Die AWS-Verschlüsselungs-SDK for JavaScript Beispiele verwenden das Webpack. DefinePlugin](https://webpack.js.org/plugins/define-plugin/), wodurch die Credential-Konstanten durch Ihre tatsächlichen Anmeldeinformationen ersetzt werden. Sie können jedoch jede Methode verwenden, um Ihre Anmeldeinformationen anzugeben. Verwenden Sie dann die Anmeldeinformationen, um einen AWS KMS Client zu erstellen.  

```
declare const credentials: {accessKeyId: string, secretAccessKey:string, sessionToken:string }

const clientProvider = getClient(KMS, {
  credentials: {
    accessKeyId,
    secretAccessKey,
    sessionToken
  }
})
```
Geben Sie als Nächstes den Schlüssel und den Zusatzschlüssel AWS KMS keys für den Generator an. Erstellen Sie dann einen AWS KMS Schlüsselbund mit dem AWS KMS Client und dem AWS KMS keys.  

```
const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:alias/EncryptDecrypt'
const keyIds = ['arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab']

const keyring = new KmsKeyringBrowser({ clientProvider, generatorKeyId, keyIds })
```

```
const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:alias/EncryptDecrypt'
const keyIds = ['arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab']

const keyring = new KmsKeyringNode({ generatorKeyId, keyIds })
```

Schritt 3: Stellen Sie den Verschlüsselungskontext ein.  
Ein [Verschlüsselungskontext](concepts.md#encryption-context) ist eine Art zufälliger, nicht geheimer, zusätzlich authentifizierter Daten. Wenn Sie bei Encrypt einen Verschlüsselungskontext angeben, bindet der Verschlüsselungskontext AWS Encryption SDK kryptografisch an den Chiffretext, sodass derselbe Verschlüsselungskontext zum Entschlüsseln der Daten erforderlich ist. Die Verwendung eines Verschlüsselungskontexts ist optional, aber wir empfehlen dies als eine bewährte Methode.  
Erstellen Sie ein einfaches Objekt, das die Verschlüsselungskontextpaare enthält. Der Schlüssel und der Wert in jedem Paar müssen eine Zeichenfolge sein.  

```
const context = {
  stage: 'demo',
  purpose: 'simple demonstration app',
  origin: 'us-west-2'
}
```

```
const context = {
  stage: 'demo',
  purpose: 'simple demonstration app',
  origin: 'us-west-2'
}
```

Schritt 4: Verschlüsseln Sie die Daten.  
Um die Klartextdaten zu verschlüsseln, rufen Sie die `encrypt`-Funktion auf. Übergeben Sie den AWS KMS Schlüsselbund, die Klartextdaten und den Verschlüsselungskontext.  
Die `encrypt`-Funktion gibt eine [verschlüsselte Nachricht](concepts.md#message) (`result`) zurück, die die verschlüsselten Daten, die verschlüsselten Datenschlüssel und wichtige Metadaten enthält, einschließlich des Verschlüsselungskontexts und der Signatur.  
Sie können [diese verschlüsselte Nachricht entschlüsseln](#javascript-example-decrypt), indem Sie das AWS Encryption SDK für jede unterstützte Programmiersprache verwenden.  

```
const plaintext = new Uint8Array([1, 2, 3, 4, 5])

const { result } = await encrypt(keyring, plaintext, { encryptionContext: context })
```

```
const plaintext = 'asdf'

const { result } = await encrypt(keyring, plaintext, { encryptionContext: context })
```

## Daten mit einem Schlüsselbund entschlüsseln AWS KMS
<a name="javascript-example-decrypt"></a>

Sie können den verwenden AWS-Verschlüsselungs-SDK for JavaScript , um die verschlüsselte Nachricht zu entschlüsseln und die Originaldaten wiederherzustellen.

In diesem Beispiel entschlüsseln wir die Daten, die wir im [AWS KMS Daten mit einem Schlüsselbund verschlüsseln](#javascript-example-encrypt)-Beispiel verschlüsselt haben.

Schritt 1: Legen Sie die Verpflichtungsrichtlinie fest.  
Ab Version 1.7. *x* von AWS-Verschlüsselungs-SDK for JavaScript, Sie können die Commitment-Richtlinie festlegen, wenn Sie die neue `buildClient` Funktion aufrufen, die einen AWS Encryption SDK Client instanziiert. Die `buildClient` Funktion verwendet einen Aufzählungswert, der Ihre Commitment-Richtlinie darstellt. Sie gibt aktualisierte `decrypt` Funktionen `encrypt` und Funktionen zurück, die Ihre Verpflichtungsrichtlinie beim Verschlüsseln und Entschlüsseln durchsetzen.  
In den folgenden Beispielen wird die `buildClient` Funktion verwendet, um die [Standard-Commitment-Richtlinie](migrate-commitment-policy.md) anzugeben,. `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` Sie können die auch verwenden`buildClient`, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter [Beschränkung verschlüsselter Datenschlüssel](configure.md#config-limit-keys).  

```
import {
  KmsKeyringBrowser,
  KMS,
  getClient,
  buildClient,
  CommitmentPolicy,
} from '@aws-crypto/client-browser'

const { encrypt, decrypt } = buildClient(
  CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
```

```
import {
  KmsKeyringNode,
  buildClient,
  CommitmentPolicy,
} from '@aws-crypto/client-node'
                                
const { encrypt, decrypt } = buildClient(
  CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
```

Schritt 2: Konstruieren Sie den Schlüsselbund.  
Um die Daten zu entschlüsseln, übergeben Sie die [verschlüsselte Nachricht](concepts.md#message) (`result`), die die `encrypt`-Funktion zurückgegeben hat. Die verschlüsselte Nachricht enthält die verschlüsselten Daten, die verschlüsselten Datenschlüssel und wichtige Metadaten, einschließlich des Verschlüsselungskontexts und der Signatur.  
Sie müssen beim Entschlüsseln auch einen [AWS KMS Schlüsselbund](use-kms-keyring.md) angeben. Sie können denselben Schlüsselbund verwenden, der zum Verschlüsseln der Daten verwendet wurde, oder einen anderen Schlüsselbund. Um erfolgreich zu sein, muss mindestens einer der AWS KMS key Schlüsselbunde im Entschlüsselungsschlüsselbund in der Lage sein, einen der verschlüsselten Datenschlüssel in der verschlüsselten Nachricht zu entschlüsseln. Da keine Datenschlüssel generiert werden, müssen Sie keinen Generatorschlüssel in einem Entschlüsselungsschlüsselbund angeben. Wenn Sie dies tun, werden der Generatorschlüssel und zusätzliche Schlüssel auf die gleiche Weise behandelt.  
Um einen Schlüsselbund AWS KMS key für eine Entschlüsselung in der anzugeben AWS-Verschlüsselungs-SDK for JavaScript, müssen Sie den [Schlüssel](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) ARN verwenden. Andernfalls AWS KMS key wird der nicht erkannt. Hilfe bei der Identifizierung von AWS KMS keys in einem AWS KMS Schlüsselbund finden Sie unter [Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund](use-kms-keyring.md#kms-keyring-id)  
Wenn Sie denselben Schlüsselbund zum Verschlüsseln und Entschlüsseln verwenden, verwenden Sie den Schlüssel, um den AWS KMS keys Schlüssel im Schlüsselbund ARNs zu identifizieren.
In diesem Beispiel erstellen wir einen Schlüsselbund, der nur einen der im Verschlüsselungsschlüsselbund enthaltenen Schlüssel enthält. AWS KMS keys Ersetzen Sie vor Ausführung dieses Codes den ARN des Beispiel-Schlüssels durch einen gültigen. Sie müssen über die `kms:Decrypt`-Berechtigung für den AWS KMS key verfügen.  
Geben Sie zunächst Ihre Anmeldeinformationen im Browser ein. [Die AWS-Verschlüsselungs-SDK for JavaScript Beispiele verwenden das Webpack. DefinePlugin](https://webpack.js.org/plugins/define-plugin/), wodurch die Credential-Konstanten durch Ihre tatsächlichen Anmeldeinformationen ersetzt werden. Sie können jedoch jede Methode verwenden, um Ihre Anmeldeinformationen anzugeben. Verwenden Sie dann die Anmeldeinformationen, um einen AWS KMS Client zu erstellen.  

```
declare const credentials: {accessKeyId: string, secretAccessKey:string, sessionToken:string }

const clientProvider = getClient(KMS, {
  credentials: {
    accessKeyId,
    secretAccessKey,
    sessionToken
  }
})
```
Erstellen Sie als Nächstes mithilfe des AWS KMS Clients einen AWS KMS Schlüsselbund. In diesem Beispiel wird nur einer der Schlüsselbunde AWS KMS keys aus dem Verschlüsselungsschlüsselbund verwendet.  

```
const keyIds = ['arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab']

const keyring = new KmsKeyringBrowser({ clientProvider, keyIds })
```

```
const keyIds = ['arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab']

const keyring = new KmsKeyringNode({ keyIds })
```

Schritt 3: Entschlüsseln Sie die Daten.  
Rufen Sie als Nächstes die `decrypt`-Funktion auf. Übergeben Sie den gerade erstellten Entschlüsselungsschlüsselbund (`keyring`) und die [verschlüsselte Nachricht](concepts.md#message), die die `encrypt`-Funktion zurückgegeben hat (`result`). Der AWS Encryption SDK verwendet den Schlüsselbund, um einen der verschlüsselten Datenschlüssel zu entschlüsseln. Dann verwendet es den Klartext-Datenschlüssel, um die Daten zu entschlüsseln.  
Wenn der Aufruf erfolgreich ist, enthält das `plaintext`-Feld die Klartextdaten (entschlüsselt). Das `messageHeader`-Feld enthält Metadaten über den Entschlüsselungsprozess, einschließlich des Verschlüsselungskontexts, der zum Entschlüsseln der Daten verwendet wurde.  

```
const { plaintext, messageHeader } = await decrypt(keyring, result)
```

```
const { plaintext, messageHeader } = await decrypt(keyring, result)
```

Schritt 4: Überprüfen Sie den Verschlüsselungskontext.  
Der [Verschlüsselungskontext](concepts.md#encryption-context), der zum Entschlüsseln der Daten verwendet wurde, ist im Nachrichten-Header (`messageHeader`) enthalten, den die `decrypt`-Funktion zurückgibt. Bevor Ihre Anwendung die Klartextdaten zurückgibt, stellen Sie sicher, dass der Verschlüsselungskontext, den Sie beim Verschlüsseln angegeben haben, im Verschlüsselungskontext enthalten ist, der bei der Entschlüsselung verwendet wurde. Eine Nichtübereinstimmung kann darauf hindeuten, dass die Daten manipuliert wurden oder dass Sie nicht den richtigen Verschlüsselungstext entschlüsselt haben.  
Bei der Überprüfung des Verschlüsselungskontexts ist keine genaue Übereinstimmung erforderlich. Wenn Sie einen Verschlüsselungsalgorithmus mit Signatur verwenden, fügt der [Manager von kryptographischen Materialien](concepts.md#crypt-materials-manager) (CMM) den öffentlichen Signaturschlüssel zum Verschlüsselungskontext hinzu, bevor die Nachricht verschlüsselt wird. Aber alle Verschlüsselungskontextpaare, die Sie übermittelt haben, sollten in den zurückgegebenen Verschlüsselungskontext aufgenommen werden.  
Holen Sie sich zuerst den Verschlüsselungskontext aus dem Nachrichten-Header. Stellen Sie dann sicher, dass jedes Schlüssel-Wert-Paar im ursprünglichen Verschlüsselungskontext (`context`) mit einem Schlüssel-Wert-Paar im zurückgegebenen Verschlüsselungskontext (`encryptionContext`) übereinstimmt.  

```
const { encryptionContext } = messageHeader

Object
  .entries(context)
  .forEach(([key, value]) => {
    if (encryptionContext[key] !== value) throw new Error('Encryption Context does not match expected values')
})
```

```
const { encryptionContext } = messageHeader

Object
  .entries(context)
  .forEach(([key, value]) => {
    if (encryptionContext[key] !== value) throw new Error('Encryption Context does not match expected values')
})
```
Wenn die Verschlüsselungskontext-Prüfung erfolgreich ist, können Sie die Klartextdaten zurückgeben.

# AWS-Verschlüsselungs-SDK for Python
<a name="python"></a>

In diesem Thema wird erklärt, wie das AWS-Verschlüsselungs-SDK for Python installiert und verwendet wird. Einzelheiten zur Programmierung mit dem AWS-Verschlüsselungs-SDK for Python finden Sie im [aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/)Repository unter GitHub. Eine API-Dokumentation finden Sie in [Read the Docs](https://aws-encryption-sdk-python.readthedocs.io/en/latest/).

**Topics**
+ [

## Voraussetzungen
](#python-prerequisites)
+ [

## Installation
](#python-installation)
+ [Beispiele](python-example-code.md)

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

Stellen Sie vor der Installation von sicher AWS-Verschlüsselungs-SDK for Python, dass Sie die folgenden Voraussetzungen erfüllen.

**Eine unterstützte Version von Python**  
Python 3.8 oder höher ist für die AWS-Verschlüsselungs-SDK for Python Versionen 3.2.0 und höher erforderlich.  
Die [AWS Cryptographic Material Providers Library](https://github.com/aws/aws-cryptographic-material-providers-library) (MPL) ist eine optionale Abhängigkeit für die in Version 4 AWS-Verschlüsselungs-SDK for Python eingeführte. *x.* Wenn Sie die MPL installieren möchten, müssen Sie Python 3.11 oder höher verwenden.
Frühere Versionen von AWS Encryption SDK unterstützen Python 2.7 und Python 3.4 und höher, wir empfehlen jedoch, dass Sie die neueste Version von verwenden AWS Encryption SDK.   
Weitere Informationen zum Download von Python finden Sie unter [Python-Downloads](https://www.python.org/downloads/).

**Das pip-Installationstool for Python**  
`pip`ist in Python 3.6 und späteren Versionen enthalten, obwohl Sie es möglicherweise aktualisieren möchten. Weitere Informationen zum Aktualisieren oder Installieren `pip` finden Sie in der `pip` Dokumentation unter [Installation](https://pip.pypa.io/en/latest/installation/).

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

Installieren Sie die neueste Version der AWS-Verschlüsselungs-SDK for Python.

**Anmerkung**  
Alle AWS-Verschlüsselungs-SDK for Python Versionen vor 3.0.0 befinden sich in der [end-of-supportPhase](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle).  
Sie können sicher von Version 2.0 aus aktualisieren. *x* und höher auf die neueste Version von AWS Encryption SDK ohne Code- oder Datenänderungen. In Version 2.0 wurden jedoch [neue Sicherheitsfunktionen](about-versions.md#version-2) eingeführt. *x* sind nicht abwärtskompatibel. Um von Versionen vor 1.7 zu aktualisieren. *x* auf Version 2.0. *x* und höher, Sie müssen zuerst auf die neueste Version 1 aktualisieren. *x-Version* von AWS Encryption SDK. Details hierzu finden Sie unter [Migrieren Sie Ihre AWS Encryption SDK](migration.md).

Verwenden Sie, `pip` um die zu installieren AWS-Verschlüsselungs-SDK for Python, wie in den folgenden Beispielen gezeigt.

**Installieren der neuesten Version**  

```
pip install "aws-encryption-sdk[MPL]"
```
Das `[MPL]` Suffix installiert die [AWS Cryptographic Material Providers Library](https://github.com/aws/aws-cryptographic-material-providers-library) (MPL). Die MPL enthält Konstrukte zum Verschlüsseln und Entschlüsseln Ihrer Daten. Die MPL ist eine optionale Abhängigkeit für die in Version 4 AWS-Verschlüsselungs-SDK for Python eingeführte. *x.* Wir empfehlen dringend, die MPL zu installieren. Wenn Sie jedoch nicht beabsichtigen, die MPL zu verwenden, können Sie das Suffix weglassen. `[MPL]`

Weitere Informationen zur Verwendung von pip für die Installation und die Aktualisierung von Paketen finden Sie unter [Pakete installieren](https://packaging.python.org/tutorials/installing-packages/).

Das AWS-Verschlüsselungs-SDK for Python erfordert die [Kryptografie-Bibliothek (pyca/cryptography](https://cryptography.io/en/latest/)) auf allen Plattformen. Alle Versionen von installieren und erstellen die Bibliothek `pip` automatisch unter Windows. `cryptography` `pip`8.1 und höher werden automatisch `cryptography` auf Linux installiert und erstellt. Wenn Sie eine frühere Version von verwenden `pip` und Ihre Linux-Umgebung nicht über die Tools verfügt, die zum Erstellen der `cryptography` Bibliothek erforderlich sind, müssen Sie sie installieren. Weitere Informationen finden Sie unter [Erstellen von Kryptographie unter Linux](https://cryptography.io/en/latest/installation.html#building-cryptography-on-linux).

In den Versionen 1.10.0 und 2.5.0 liegt die AWS-Verschlüsselungs-SDK for Python [Kryptografieabhängigkeit](https://cryptography.io/en/latest/) zwischen 2.5.0 und 3.3.2. Andere Versionen von AWS-Verschlüsselungs-SDK for Python installieren die neueste Version der Kryptografie. Wenn Sie eine neuere Version der Kryptografie als 3.3.2 benötigen, empfehlen wir Ihnen, die neueste Hauptversion von zu verwenden. AWS-Verschlüsselungs-SDK for Python

Die neueste Entwicklungsversion von finden Sie im AWS-Verschlüsselungs-SDK for Python[aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/)Repository unter. GitHub

Schauen Sie sich nach der AWS-Verschlüsselungs-SDK for Python Installation von zunächst den [Python-Beispielcode](python-example-code.md) in diesem Handbuch an.

# AWS-Verschlüsselungs-SDK for Python Beispielcode
<a name="python-example-code"></a>

Die folgenden Beispiele zeigen Ihnen, wie Sie mit AWS-Verschlüsselungs-SDK for Python dem Daten ver- und entschlüsseln können.

Die Beispiele in diesem Abschnitt zeigen, wie Sie Version 4 verwenden. *x* von AWS-Verschlüsselungs-SDK for Python mit der optionalen [Bibliotheksabhängigkeit von Cryptographic Material Providers](https://github.com/aws/aws-cryptographic-material-providers-library) (`aws-cryptographic-material-providers`). Um Beispiele zu sehen, die frühere Versionen verwenden, oder Installationen ohne die Material Providers Library (MPL), suchen Sie Ihre Version in der [Releases-Liste](https://github.com/aws/aws-encryption-sdk-python/releases) des [aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/)Repositorys unter. GitHub

Wenn Sie Version 4 verwenden. *x* von der AWS-Verschlüsselungs-SDK for Python mit der MPL, es verwendet [Schlüsselringe](choose-keyring.md), um die [Umschlagverschlüsselung](concepts.md#envelope-encryption) durchzuführen. Das AWS Encryption SDK stellt Schlüsselbunde bereit, die mit den Hauptschlüsselanbietern kompatibel sind, die Sie in früheren Versionen verwendet haben. Weitere Informationen finden Sie unter [Schlüsselbund-Kompatibilität](choose-keyring.md#keyring-compatibility). Beispiele für die Migration von Master-Key-Anbietern zu Keyrings finden Sie unter [Migrationsbeispiele im Repository](https://github.com/aws/aws-encryption-sdk-python/tree/master/examples/src/migration) auf; `aws-encryption-sdk-python` GitHub

**Topics**
+ [Zeichenfolgen](#python-example-strings)
+ [Byte-Streams](#python-example-streams)

## Verschlüsseln und Entschlüsseln von Zeichenfolgen
<a name="python-example-strings"></a>

Das folgende Beispiel zeigt Ihnen, wie Sie Zeichenketten verschlüsseln und entschlüsseln können. AWS Encryption SDK In diesem Beispiel wird ein [AWS KMS Schlüsselbund](use-kms-keyring.md) mit einem symmetrischen KMS-Schlüssel verwendet.

In diesem Beispiel wird der AWS Encryption SDK Client mit der [Standard-Commitment-Richtlinie](migrate-commitment-policy.md) instanziiert. `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` Weitere Informationen finden Sie unter [Festlegung Ihrer Verpflichtungspolitik](migrate-commitment-policy.md).

```
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
This example sets up the KMS Keyring

The AWS KMS keyring uses symmetric encryption KMS keys to generate, encrypt and
decrypt data keys. This example creates a KMS Keyring and then encrypts a custom input EXAMPLE_DATA
with an encryption context. This example also includes some sanity checks for demonstration:
1. Ciphertext and plaintext data are not the same
2. Encryption context is correct in the decrypted message header
3. Decrypted plaintext value matches EXAMPLE_DATA
These sanity checks are for demonstration in the example only. You do not need these in your code.

AWS KMS keyrings can be used independently or in a multi-keyring with other keyrings
of the same or a different type.

"""

import boto3
from aws_cryptographic_material_providers.mpl import AwsCryptographicMaterialProviders
from aws_cryptographic_material_providers.mpl.config import MaterialProvidersConfig
from aws_cryptographic_material_providers.mpl.models import CreateAwsKmsKeyringInput
from aws_cryptographic_material_providers.mpl.references import IKeyring
from typing import Dict  # noqa pylint: disable=wrong-import-order

import aws_encryption_sdk
from aws_encryption_sdk import CommitmentPolicy

EXAMPLE_DATA: bytes = b"Hello World"


def encrypt_and_decrypt_with_keyring(
    kms_key_id: str
):
    """Demonstrate an encrypt/decrypt cycle using an AWS KMS keyring.

    Usage: encrypt_and_decrypt_with_keyring(kms_key_id)
    :param kms_key_id: KMS Key identifier for the KMS key you want to use for encryption and
    decryption of your data keys.
    :type kms_key_id: string
    
    """
    # 1. Instantiate the encryption SDK client.
    # This builds the client with the REQUIRE_ENCRYPT_REQUIRE_DECRYPT commitment policy,
    # which enforces that this client only encrypts using committing algorithm suites and enforces
    # that this client will only decrypt encrypted messages that were created with a committing
    # algorithm suite.
    # This is the default commitment policy if you were to build the client as
    # `client = aws_encryption_sdk.EncryptionSDKClient()`.
    client = aws_encryption_sdk.EncryptionSDKClient(
        commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
    )

    # 2. Create a boto3 client for KMS.
    kms_client = boto3.client('kms', region_name="us-west-2")

    # 3. Optional: create encryption context.
    # Remember that your encryption context is NOT SECRET.
    encryption_context: Dict[str, str] = {
        "encryption": "context",
        "is not": "secret",
        "but adds": "useful metadata",
        "that can help you": "be confident that",
        "the data you are handling": "is what you think it is",
    }

    # 4. Create your keyring
    mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
        config=MaterialProvidersConfig()
    )

    keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput(
        kms_key_id=kms_key_id,
        kms_client=kms_client
    )

    kms_keyring: IKeyring = mat_prov.create_aws_kms_keyring(
        input=keyring_input
    )

    # 5. Encrypt the data with the encryptionContext.
    ciphertext, _ = client.encrypt(
        source=EXAMPLE_DATA,
        keyring=kms_keyring,
        encryption_context=encryption_context
    )

    # 6. Demonstrate that the ciphertext and plaintext are different.
    # (This is an example for demonstration; you do not need to do this in your own code.)
    assert ciphertext != EXAMPLE_DATA, \
        "Ciphertext and plaintext data are the same. Invalid encryption"

    # 7. Decrypt your encrypted data using the same keyring you used on encrypt.
    plaintext_bytes, _ = client.decrypt(
        source=ciphertext,
        keyring=kms_keyring,
        # Provide the encryption context that was supplied to the encrypt method
        encryption_context=encryption_context,
    )

    # 8. Demonstrate that the decrypted plaintext is identical to the original plaintext.
    # (This is an example for demonstration; you do not need to do this in your own code.)
    assert plaintext_bytes == EXAMPLE_DATA, \
        "Decrypted plaintext should be identical to the original plaintext. Invalid decryption"
```

## Verschlüsseln und Entschlüsseln von Byte-Streams
<a name="python-example-streams"></a>

Das folgende Beispiel zeigt Ihnen, wie Sie Bytestreams AWS Encryption SDK verschlüsseln und entschlüsseln können. In diesem Beispiel wird ein [Raw AES-Schlüsselbund](use-raw-aes-keyring.md) verwendet.

In diesem Beispiel wird der AWS Encryption SDK Client mit der [Standard-Commitment-Richtlinie](migrate-commitment-policy.md) instanziiert. `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` Weitere Informationen finden Sie unter [Festlegung Ihrer Verpflichtungspolitik](migrate-commitment-policy.md).

```
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
This example demonstrates file streaming for encryption and decryption.

File streaming is useful when the plaintext or ciphertext file/data is too large to load into
memory. Therefore, the AWS Encryption SDK allows users to stream the data, instead of loading it
all at once in memory. In this example, we demonstrate file streaming for encryption and decryption
using a Raw AES keyring. However, you can use any keyring with streaming.

This example creates a Raw AES Keyring and then encrypts an input stream from the file
`plaintext_filename` with an encryption context to an output (encrypted) file `ciphertext_filename`.
It then decrypts the ciphertext from `ciphertext_filename` to a new file `decrypted_filename`.
This example also includes some sanity checks for demonstration:
1. Ciphertext and plaintext data are not the same
2. Encryption context is correct in the decrypted message header
3. Decrypted plaintext value matches EXAMPLE_DATA
These sanity checks are for demonstration in the example only. You do not need these in your code.

See raw_aes_keyring_example.py in the same directory for another raw AES keyring example
in the AWS Encryption SDK for Python.
"""
import filecmp
import secrets

from aws_cryptographic_material_providers.mpl import AwsCryptographicMaterialProviders
from aws_cryptographic_material_providers.mpl.config import MaterialProvidersConfig
from aws_cryptographic_material_providers.mpl.models import AesWrappingAlg, CreateRawAesKeyringInput
from aws_cryptographic_material_providers.mpl.references import IKeyring
from typing import Dict  # noqa pylint: disable=wrong-import-order

import aws_encryption_sdk
from aws_encryption_sdk import CommitmentPolicy


def encrypt_and_decrypt_with_keyring(
    plaintext_filename: str,
    ciphertext_filename: str,
    decrypted_filename: str
):
    """Demonstrate a streaming encrypt/decrypt cycle.

    Usage: encrypt_and_decrypt_with_keyring(plaintext_filename
                                            ciphertext_filename
                                            decrypted_filename)
    :param plaintext_filename: filename of the plaintext data
    :type plaintext_filename: string
    :param ciphertext_filename: filename of the ciphertext data
    :type ciphertext_filename: string
    :param decrypted_filename: filename of the decrypted data
    :type decrypted_filename: string
    """
    # 1. Instantiate the encryption SDK client.
    # This builds the client with the REQUIRE_ENCRYPT_REQUIRE_DECRYPT commitment policy,
    # which enforces that this client only encrypts using committing algorithm suites and enforces
    # that this client will only decrypt encrypted messages that were created with a committing
    # algorithm suite.
    # This is the default commitment policy if you were to build the client as
    # `client = aws_encryption_sdk.EncryptionSDKClient()`.
    client = aws_encryption_sdk.EncryptionSDKClient(
        commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
    )

    # 2. The key namespace and key name are defined by you.
    # and are used by the Raw AES keyring to determine
    # whether it should attempt to decrypt an encrypted data key.
    key_name_space = "Some managed raw keys"
    key_name = "My 256-bit AES wrapping key"

    # 3. Optional: create encryption context.
    # Remember that your encryption context is NOT SECRET.
    encryption_context: Dict[str, str] = {
        "encryption": "context",
        "is not": "secret",
        "but adds": "useful metadata",
        "that can help you": "be confident that",
        "the data you are handling": "is what you think it is",
    }

    # 4. Generate a 256-bit AES key to use with your keyring.
    # In practice, you should get this key from a secure key management system such as an HSM.

    # Here, the input to secrets.token_bytes() = 32 bytes = 256 bits
    static_key = secrets.token_bytes(32)

    # 5. Create a Raw AES keyring
    # We choose to use a raw AES keyring, but any keyring can be used with streaming.
    mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
        config=MaterialProvidersConfig()
    )

    keyring_input: CreateRawAesKeyringInput = CreateRawAesKeyringInput(
        key_namespace=key_name_space,
        key_name=key_name,
        wrapping_key=static_key,
        wrapping_alg=AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16
    )

    raw_aes_keyring: IKeyring = mat_prov.create_raw_aes_keyring(
        input=keyring_input
    )

    # 6. Encrypt the data stream with the encryptionContext
    with open(plaintext_filename, 'rb') as pt_file, open(ciphertext_filename, 'wb') as ct_file:
        with client.stream(
            mode='e',
            source=pt_file,
            keyring=raw_aes_keyring,
            encryption_context=encryption_context
        ) as encryptor:
            for chunk in encryptor:
                ct_file.write(chunk)

    # 7. Demonstrate that the ciphertext and plaintext are different.
    # (This is an example for demonstration; you do not need to do this in your own code.)
    assert not filecmp.cmp(plaintext_filename, ciphertext_filename), \
        "Ciphertext and plaintext data are the same. Invalid encryption"

    # 8. Decrypt your encrypted data stream using the same keyring you used on encrypt.
    with open(ciphertext_filename, 'rb') as ct_file, open(decrypted_filename, 'wb') as pt_file:
        with client.stream(
            mode='d',
            source=ct_file,
            keyring=raw_aes_keyring,
            encryption_context=encryption_context
        ) as decryptor:
            for chunk in decryptor:
                pt_file.write(chunk)

    # 10. Demonstrate that the decrypted plaintext is identical to the original plaintext.
    # (This is an example for demonstration; you do not need to do this in your own code.)
    assert filecmp.cmp(plaintext_filename, decrypted_filename), \
        "Decrypted plaintext should be identical to the original plaintext. Invalid decryption"
```

# 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");
```

# AWS Encryption SDK Befehlszeilenschnittstelle
<a name="crypto-cli"></a>

Die AWS Encryption SDK Befehlszeilenschnittstelle (AWS Encryption CLI) ermöglicht es Ihnen, Daten interaktiv AWS Encryption SDK an der Befehlszeile und in Skripten zu verschlüsseln und zu entschlüsseln. Sie benötigen keine Kryptographie- oder Programmierkenntnisse.

**Anmerkung**  
Versionen der AWS Encryption CLI vor 4.0.0 befinden sich in der [end-of-supportPhase](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle).  
Sie können problemlos von Version 2.1 aus aktualisieren. *x* und höher auf die neueste Version der AWS Encryption CLI ohne Code- oder Datenänderungen. In Version 2.1 wurden jedoch [neue Sicherheitsfunktionen](about-versions.md#version-2) eingeführt. *x* sind nicht abwärtskompatibel. Um von Version 1.7 zu aktualisieren. *x* oder früher, Sie müssen zuerst auf die neueste Version 1 aktualisieren. *x-Version* der AWS Encryption CLI. Details hierzu finden Sie unter [Migrieren Sie Ihre AWS Encryption SDK](migration.md).  
Neue Sicherheitsfunktionen wurden ursprünglich in den AWS Encryption CLI Versionen 1.7 veröffentlicht. *x* und 2.0. *x.* Allerdings AWS Encryption CLI Version 1.8. *x* ersetzt Version 1.7. *x* und AWS Encryption CLI 2.1. *x* ersetzt 2.0. *x.* Einzelheiten finden Sie in der entsprechenden [Sicherheitsempfehlung](https://github.com/aws/aws-encryption-sdk-cli/security/advisories/GHSA-2xwp-m7mq-7q3r) im [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)Repository unter GitHub.

Wie alle Implementierungen von bietet die AWS Encryption SDK AWS Encryption CLI erweiterte Datenschutzfunktionen. [Dazu gehören [Umschlagverschlüsselung](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/how-it-works.html#envelope-encryption), zusätzliche authentifizierte Daten (AAD) und sichere, authentifizierte, symmetrische [Schlüsselalgorithmen](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/supported-algorithms.html) wie 256-Bit-AES-GCM mit Schlüsselableitung, Schlüsselzusage und Signierung.](concepts.md#key-commitment) 

Die AWS Verschlüsselungs-CLI basiert auf der [AWS-Verschlüsselungs-SDK for Python](python.md)und wird unter Linux, macOS und Windows unterstützt. Sie können Befehle und Skripts zum Verschlüsseln und Entschlüsseln Ihrer Daten in Ihrer bevorzugten Shell unter Linux oder macOS, in einem Befehlszeilenfenster (cmd.exe) unter Windows und in einer PowerShell Konsole auf jedem System ausführen. 

Alle sprachspezifischen Implementierungen von AWS Encryption SDK, einschließlich der AWS Encryption CLI, sind interoperabel. Sie können beispielsweise Daten mit der verschlüsseln [AWS-Verschlüsselungs-SDK for Java](java.md)und mit der AWS Encryption CLI entschlüsseln. 

Dieses Thema stellt die AWS Encryption CLI vor, erklärt, wie sie installiert und verwendet wird, und enthält mehrere Beispiele, die Ihnen den Einstieg erleichtern. Einen schnellen Start finden Sie unter [So verschlüsseln und entschlüsseln Sie Ihre Daten mit der AWS Encryption CLI](https://aws.amazon.com/blogs/security/how-to-encrypt-and-decrypt-your-data-with-the-aws-encryption-cli/) im AWS Sicherheitsblog. Ausführlichere Informationen finden [Sie unter Read The Docs](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/) und entwickeln Sie gemeinsam mit uns die AWS Encryption CLI im [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)Repository am GitHub.

**Leistung**  
Die AWS Encryption CLI basiert auf dem AWS-Verschlüsselungs-SDK for Python. Jedes Mal, wenn Sie die CLI ausführen, starten Sie eine neue Instance der Python-Laufzeitumgebung. Um die Leistung zu verbessern, verwenden Sie nach Möglichkeit einen einzigen Befehl anstelle einer Reihe unabhängiger Befehle. Führen Sie beispielsweise einen Befehl aus, der die Dateien in einem Verzeichnis rekursiv verarbeitet, anstatt separate Befehle für jede Datei auszuführen.

**Topics**
+ [Installieren der -CLI](crypto-cli-install.md)
+ [Die CLI verwenden](crypto-cli-how-to.md)
+ [Beispiele](crypto-cli-examples.md)
+ [Syntax und Parameterreferenz](crypto-cli-reference.md)
+ [Versionen](crypto-cli-versions.md)

# Installation der AWS Encryption SDK Befehlszeilenschnittstelle
<a name="crypto-cli-install"></a>

In diesem Thema wird erklärt, wie die AWS Encryption CLI installiert wird. Ausführliche Informationen finden Sie im [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)Repository unter GitHub und in [der Dokumentation](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/).

**Topics**
+ [

## Installieren der Voraussetzungen
](#crypto-cli-prerequisites)
+ [Installieren der -CLI](#install-sdk-cli)

## Installieren der Voraussetzungen
<a name="crypto-cli-prerequisites"></a>

Die AWS Encryption CLI basiert auf dem AWS-Verschlüsselungs-SDK for Python. Um die AWS Encryption CLI zu installieren, benötigen Sie Python und `pip` das Python-Paketverwaltungstool. Python und `pip` stehen auf allen unterstützten Plattformen zur Verfügung.

Installieren Sie die folgenden Voraussetzungen, bevor Sie die AWS Encryption CLI installieren: 

**Python**  
Python 3.8 oder höher ist für die AWS Encryption CLI Versionen 4.2.0 und höher erforderlich.  
Frühere Versionen der AWS Encryption CLI unterstützen Python 2.7 und 3.4 und höher, wir empfehlen jedoch, die neueste Version der AWS Encryption CLI zu verwenden.  
Python ist in den meisten Linux- und macOS-Installationen enthalten, Sie müssen jedoch auf Python 3.6 oder höher aktualisieren. Wir empfehlen Ihnen, die neueste Version von Python zu verwenden. Unter Windows müssen Sie Python installieren; es ist standardmäßig nicht installiert. Informationen zum Herunterladen und Installieren von Python finden Sie unter [Python-Downloads](https://www.python.org/downloads/).  
Um festzustellen, ob Python installiert ist, geben Sie in der Befehlszeile Folgendes ein.  

```
python
```
Um die Python-Version zu überprüfen, verwenden Sie den Parameter `-V` (Großbuchstabe V).  

```
python -V
```
Unter Windows fügen Sie nach der Installation von Python den Pfad zur `Python.exe` Datei zum Wert der Umgebungsvariablen **Path** hinzu.   
Standardmäßig ist Python im Verzeichnis All Users oder in einem Benutzerprofilverzeichnis (`$home` oder `%userprofile%`) im Unterverzeichnis `AppData\Local\Programs\Python` installiert. Um den Speicherort der Datei `Python.exe` auf Ihrem System zu finden, überprüfen Sie einen der folgenden Registrierungsschlüssel. Sie können es verwenden PowerShell , um die Registrierung zu durchsuchen.   

```
PS C:\> dir HKLM:\Software\Python\PythonCore\version\InstallPath
# -or-
PS C:\> dir HKCU:\Software\Python\PythonCore\version\InstallPath
```

**pip**  
`pip` ist der Python-Paketmanager. Um die AWS Encryption CLI und ihre Abhängigkeiten zu installieren, benötigen Sie `pip` 8.1 oder höher. Informationen zum Installieren und Aktualisieren von `pip` finden Sie unter [Installation](https://pip.pypa.io/en/latest/installing/) in der `pip`-Dokumentation.  
Auf Linux-Installationen können `pip` Versionen vor 8.1 die **Kryptografiebibliothek**, die die AWS Encryption CLI benötigt, nicht erstellen. Wenn Sie Ihre `pip` Version nicht aktualisieren möchten, können Sie die Build-Tools separat installieren. Weitere Informationen finden Sie unter [Kryptographie unter Linux](https://cryptography.io/en/latest/installation.html#building-cryptography-on-linux).

**AWS Command Line Interface**  
Das AWS Command Line Interface (AWS CLI) ist nur erforderlich, wenn Sie AWS KMS keys in AWS Key Management Service (AWS KMS) mit der AWS Encryption CLI verwenden. Wenn Sie einen anderen [Hauptschlüsselanbieter](concepts.md#master-key-provider) verwenden, AWS CLI ist der nicht erforderlich.  
Für die Verwendung AWS KMS keys mit der AWS Encryption CLI müssen Sie den [installieren](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) und [konfigurieren](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-quick-configuration) AWS CLI. Die Konfiguration stellt die Anmeldeinformationen, die Sie zur Authentifizierung verwenden, für die AWS Encryption CLI zur AWS KMS Verfügung. 

## Installation und Aktualisierung der AWS Encryption CLI
<a name="install-sdk-cli"></a>

Installieren Sie die neueste Version der AWS Encryption CLI. Wenn Sie die AWS Encryption CLI `pip` zur Installation verwenden, werden automatisch die Bibliotheken installiert, die die CLI benötigt, einschließlich der [AWS-Verschlüsselungs-SDK for Python](python.md)[Python-Kryptografiebibliothek](https://cryptography.io/en/latest/) und der [AWS SDK für Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html).

**Anmerkung**  
Versionen der AWS Encryption CLI vor 4.0.0 befinden sich in der [end-of-supportPhase](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle).  
Sie können problemlos von Version 2.1 aus aktualisieren. *x* und höher auf die neueste Version der AWS Encryption CLI ohne Code- oder Datenänderungen. In Version 2.1 wurden jedoch [neue Sicherheitsfunktionen](about-versions.md#version-2) eingeführt. *x* sind nicht abwärtskompatibel. Um von Version 1.7 zu aktualisieren. *x* oder früher, Sie müssen zuerst auf die neueste Version 1 aktualisieren. *x-Version* der AWS Encryption CLI. Details hierzu finden Sie unter [Migrieren Sie Ihre AWS Encryption SDK](migration.md).  
Neue Sicherheitsfunktionen wurden ursprünglich in den AWS Encryption CLI Versionen 1.7 veröffentlicht. *x* und 2.0. *x.* Allerdings AWS Encryption CLI Version 1.8. *x* ersetzt Version 1.7. *x* und AWS Encryption CLI 2.1. *x* ersetzt 2.0. *x.* Einzelheiten finden Sie in der entsprechenden [Sicherheitsempfehlung](https://github.com/aws/aws-encryption-sdk-cli/security/advisories/GHSA-2xwp-m7mq-7q3r) im [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)Repository unter GitHub.

**Um die neueste Version der AWS Encryption CLI zu installieren**  

```
pip install aws-encryption-sdk-cli
```

**Um auf die neueste Version der AWS Encryption CLI zu aktualisieren**  

```
pip install --upgrade aws-encryption-sdk-cli
```

**Um die Versionsnummern Ihrer AWS Encryption CLI zu finden und AWS Encryption SDK**  

```
aws-encryption-cli --version
```
In der Ausgabe werden die Versionsnummern beider Bibliotheken aufgeführt.  

```
aws-encryption-sdk-cli/2.1.0 aws-encryption-sdk/2.0.0
```

**Um auf die neueste Version der AWS Encryption CLI zu aktualisieren**  

```
pip install --upgrade aws-encryption-sdk-cli
```

Durch die Installation der AWS Encryption CLI wird auch die neueste Version von installiert AWS SDK für Python (Boto3), sofern sie nicht bereits installiert ist. Wenn Boto3 installiert ist, überprüft das Installationsprogramm die Boto3-Version und aktualisiert sie bei Bedarf.

**Um Ihre installierte Version von Boto3 zu finden**  

```
pip show boto3
```

**Um auf die neueste Version von Boto3 zu aktualisieren**  

```
pip install --upgrade boto3
```

Informationen zur Installation der Version der AWS Encryption CLI, die sich derzeit in der Entwicklung befindet, finden Sie im [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)Repository unter GitHub.

Weitere Informationen zur Verwendung von `pip` für die Installation und die Aktualisierung von Python-Paketen finden Sie in der [pip-Dokumentation](https://pip.pypa.io/en/stable/quickstart/).

# So verwenden Sie die AWS Encryption CLI
<a name="crypto-cli-how-to"></a>

In diesem Thema wird erklärt, wie die Parameter in der AWS Encryption CLI verwendet werden. Beispiele finden Sie unter [Beispiele für die AWS Encryption CLI](crypto-cli-examples.md). Eine vollständige Dokumentation finden Sie in [Read the Docs](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/). Die in diesen Beispielen gezeigte Syntax bezieht sich auf AWS Encryption CLI Version 2.1. *x* und höher.

**Anmerkung**  
Versionen der AWS Encryption CLI vor 4.0.0 befinden sich in der [end-of-supportPhase](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle).  
Sie können problemlos von Version 2.1 aus aktualisieren. *x* und höher auf die neueste Version der AWS Encryption CLI ohne Code- oder Datenänderungen. In Version 2.1 wurden jedoch [neue Sicherheitsfunktionen](about-versions.md#version-2) eingeführt. *x* sind nicht abwärtskompatibel. Um von Version 1.7 zu aktualisieren. *x* oder früher, Sie müssen zuerst auf die neueste Version 1 aktualisieren. *x-Version* der AWS Encryption CLI. Details hierzu finden Sie unter [Migrieren Sie Ihre AWS Encryption SDK](migration.md).  
Neue Sicherheitsfunktionen wurden ursprünglich in den AWS Encryption CLI Versionen 1.7 veröffentlicht. *x* und 2.0. *x.* Allerdings AWS Encryption CLI Version 1.8. *x* ersetzt Version 1.7. *x* und AWS Encryption CLI 2.1. *x* ersetzt 2.0. *x.* Einzelheiten finden Sie in der entsprechenden [Sicherheitsempfehlung](https://github.com/aws/aws-encryption-sdk-cli/security/advisories/GHSA-2xwp-m7mq-7q3r) im [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)Repository unter GitHub.

Ein Beispiel zur Verwendung der Sicherheitsfunktion, die verschlüsselte Datenschlüssel einschränkt, finden Sie unter[Beschränkung verschlüsselter Datenschlüssel](configure.md#config-limit-keys).

Ein Beispiel, das zeigt, wie Schlüssel für AWS KMS mehrere Regionen verwendet werden, finden Sie unter[Verwenden Sie mehrere Regionen AWS KMS keys](configure.md#config-mrks).

**Topics**
+ [

## Daten verschlüsseln und entschlüsseln
](#crypto-cli-e-d-intro)
+ [

## Wie spezifiziert man Wrapping-Schlüssel
](#crypto-cli-master-key)
+ [

## Eingaben bereitstellen
](#crypto-cli-input)
+ [

## Den Ausgabespeicherort festlegen
](#crypto-cli-output)
+ [

## Einen Verschlüsselungskontext verwenden
](#crypto-cli-encryption-context)
+ [

## Wie spezifiziert man eine Verpflichtungsrichtlinie
](#crypto-cli-commitment-policy)
+ [

## Parameter in einer Konfigurationsdatei speichern
](#crypto-cli-config-file)

## Daten verschlüsseln und entschlüsseln
<a name="crypto-cli-e-d-intro"></a>

Die AWS Verschlüsselungs-CLI verwendet die Funktionen von AWS Encryption SDK , um das sichere Verschlüsseln und Entschlüsseln von Daten zu vereinfachen.

**Anmerkung**  
Der `--master-keys` Parameter ist in Version 1.8 veraltet. *x* der AWS Encryption CLI und wurde in Version 2.1 entfernt. *x.* Verwenden Sie stattdessen den `--wrapping-keys`-Parameter. Ab Version 2.1. *x*, der `--wrapping-keys` Parameter ist beim Verschlüsseln und Entschlüsseln erforderlich. Details hierzu finden Sie unter [AWS Encryption SDK CLI Syntax und Parameterreferenz](crypto-cli-reference.md).
+ Wenn Sie Daten in der AWS Encryption CLI verschlüsseln, geben Sie Ihre Klartextdaten und einen [Wrapping-Schlüssel](concepts.md#master-key) (oder *Hauptschlüssel*) an, z. B. ein AWS KMS key in AWS Key Management Service (AWS KMS). Wenn Sie einen benutzerdefinierten Hauptschlüsselanbieter verwenden, müssen Sie auch den Anbieter angeben. Außerdem geben Sie Ausgabespeicherorte für die [verschlüsselte Nachricht](concepts.md#message) und für Metadaten über die Verschlüsselungsoperation an. Ein [Verschlüsselungskontext](concepts.md#encryption-context) ist optional, wird aber empfohlen.

  In Version 1.8. *x*, der `--commitment-policy` Parameter ist erforderlich, wenn Sie den `--wrapping-keys` Parameter verwenden; andernfalls ist er nicht gültig. Ab Version 2.1. *x*, der `--commitment-policy` Parameter ist optional, wird aber empfohlen.

  ```
  aws-encryption-cli --encrypt --input myPlaintextData \
                     --wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab \
                     --output myEncryptedMessage \
                     --metadata-output ~/metadata \
                     --encryption-context purpose=test \
                     --commitment-policy require-encrypt-require-decrypt
  ```

  Die AWS Encryption CLI verschlüsselt Ihre Daten unter einem eindeutigen Datenschlüssel. Anschließend verschlüsselt sie den Datenschlüssel unter den von Ihnen angegebenen Wrapping-Schlüsseln. Sie gibt eine [verschlüsselte Nachricht](concepts.md#message) und Metadaten über die Operation zurück. Die verschlüsselte Nachricht enthält Ihre verschlüsselten Daten (*verschlüsselter Text*) und eine verschlüsselte Kopie des Datenschlüssels. Sie müssen sich nicht um die Speicherung, Verwaltung oder den Verlust des Datenschlüssels kümmern.

   
+ Wenn Sie Daten entschlüsseln, übergeben Sie Ihre verschlüsselte Nachricht, den optionalen Verschlüsselungskontext und den Speicherort für die Klartextausgabe und die Metadaten. Sie geben auch die Wrapping-Schlüssel an, die die AWS Encryption CLI zum Entschlüsseln der Nachricht verwenden kann, oder teilen der AWS Encryption CLI mit, dass sie alle Wrapping-Schlüssel verwenden kann, die die Nachricht verschlüsselt haben.

  Ab Version 1.8. *x*, der `--wrapping-keys` Parameter ist beim Entschlüsseln optional, wird aber empfohlen. Ab Version 2.1. *x*, der `--wrapping-keys` Parameter ist beim Verschlüsseln und Entschlüsseln erforderlich.

  Beim Entschlüsseln können Sie das **Schlüsselattribut** des `--wrapping-keys` Parameters verwenden, um die Wrapping-Schlüssel anzugeben, mit denen Ihre Daten entschlüsselt werden. [Die Angabe eines AWS KMS Umschließungsschlüssels beim Entschlüsseln ist optional, hat sich jedoch bewährt, um zu verhindern, dass Sie einen Schlüssel verwenden, den Sie nicht verwenden wollten.](best-practices.md) Wenn Sie einen benutzerdefinierten Hauptschlüsselanbieter verwenden, müssen Sie den Anbieter und den Wrapping-Schlüssel angeben.

  Wenn Sie das **Schlüsselattribut** nicht verwenden, müssen Sie das [**Discovery-Attribut**](#discovery-cli-attribute) des `--wrapping-keys` Parameters auf setzen`true`, sodass die AWS Encryption CLI mit einem beliebigen Wrapping-Schlüssel, der die Nachricht verschlüsselt hat, entschlüsseln kann. 

  Es hat sich bewährt, den `--max-encrypted-data-keys` Parameter zu verwenden, um zu verhindern, dass eine falsch formatierte Nachricht mit einer übermäßigen Anzahl verschlüsselter Datenschlüssel entschlüsselt wird. Geben Sie die erwartete Anzahl verschlüsselter Datenschlüssel (einen für jeden bei der Verschlüsselung verwendeten Wrapping-Schlüssel) oder einen angemessenen Höchstwert (z. B. 5) an. Details hierzu finden Sie unter [Beschränkung verschlüsselter Datenschlüssel](configure.md#config-limit-keys).

  Der `--buffer` Parameter gibt erst dann Klartext zurück, wenn alle Eingaben verarbeitet wurden, einschließlich der Überprüfung der digitalen Signatur, falls eine vorhanden ist. 

  Der `--decrypt-unsigned` Parameter entschlüsselt Chiffretext und stellt sicher, dass Nachrichten vor der Entschlüsselung unsigniert sind. Verwenden Sie diesen Parameter, wenn Sie den `--algorithm` Parameter verwendet und eine Algorithmussuite ohne digitale Signatur zum Verschlüsseln von Daten ausgewählt haben. Wenn der Chiffretext signiert ist, schlägt die Entschlüsselung fehl.

  Sie können `--decrypt` oder `--decrypt-unsigned` für die Entschlüsselung verwenden, aber nicht beide.

  ```
  aws-encryption-cli --decrypt --input myEncryptedMessage \
                     --wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab \
                     --output myPlaintextData \
                     --metadata-output ~/metadata \
                     --max-encrypted-data-keys 1 \
                     --buffer \
                     --encryption-context purpose=test \ 
                     --commitment-policy require-encrypt-require-decrypt
  ```

  Die AWS Encryption CLI verwendet den Wrapping-Schlüssel, um den Datenschlüssel in der verschlüsselten Nachricht zu entschlüsseln. Anschließend verwendet sie den Datenschlüssel zum Entschlüsseln Ihrer Daten. Sie gibt Ihre Klartextdaten und Metadaten über die Operation zurück.

## Wie spezifiziert man Wrapping-Schlüssel
<a name="crypto-cli-master-key"></a>

Wenn Sie Daten in der AWS Encryption CLI verschlüsseln, müssen Sie mindestens einen [Wrapping-Schlüssel](concepts.md#master-key) (oder *Masterschlüssel*) angeben. Sie können AWS KMS keys in AWS Key Management Service (AWS KMS), Wrapping Keys von einem benutzerdefinierten [Masterkey-Anbieter](concepts.md#master-key-provider) oder beides verwenden. Der Kundenmasterschlüssel-Anbieter kann ein beliebiger kompatibler Python-Masterschlüssel-Anbieter sein.

Um das Umschließen von Schlüsseln in den Versionen 1.8 anzugeben. *x* und höher verwenden Sie den `--wrapping-keys` Parameter (`-w`). Der Wert dieses Parameters ist eine Sammlung von [Attributen](#cli-master-key-attributes) mit dem `attribute=value` Format. Welche Attribute Sie verwenden, hängt von dem Masterschlüssel-Anbieter und dem Befehl ab.
+ **AWS KMS**. In Verschlüsselungsbefehlen müssen Sie einen `--wrapping-keys` Parameter mit einem **Schlüsselattribut** angeben. Ab Version 2.1. *x*, der `--wrapping-keys` Parameter ist auch für Entschlüsselungsbefehle erforderlich. Bei der Entschlüsselung muss der `--wrapping-keys` Parameter ein **Schlüsselattribut** oder ein **Erkennungsattribut** mit einem Wert von `true` (aber nicht beiden) haben. Andere Attribute sind optional.
+ **Kundenmasterschlüssel-Anbieter**. Sie müssen in jedem Befehl einen `--wrapping-keys` Parameter angeben. Der Parameterwert muss **key**- und **provider**-Attribute besitzen.

Sie können [mehrere `--wrapping-keys` Parameter](#cli-many-cmks) und mehrere **Schlüsselattribute** in denselben Befehl aufnehmen. 

### Umschließen von Schlüsselparameterattributen
<a name="cli-master-key-attributes"></a>

Der Wert des `--wrapping-keys`-Parameters besteht aus den folgenden Attributen und ihren Werten. Ein `--wrapping-keys` Parameter (oder `--master-keys` Parameter) ist in allen Verschlüsselungsbefehlen erforderlich. Ab Version 2.1. *x*, der `--wrapping-keys` Parameter ist auch beim Entschlüsseln erforderlich.

Wenn ein Attributname oder Wert Leerzeichen oder Sonderzeichen enthält, schließen Sie den Namen und den Wert in Anführungszeichen ein. Beispiel, `--wrapping-keys key=12345 "provider=my cool provider"`.

**Schlüssel: Geben Sie einen Wrapping-Schlüssel an**  
Verwenden Sie das **Schlüsselattribut**, um einen Umschließungsschlüssel zu identifizieren. Bei der Verschlüsselung kann es sich bei dem Wert um einen beliebigen Schlüsselbezeichner handeln, den der Hauptschlüsselanbieter erkennt.   

```
--wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab
```
In einem Verschlüsselungsbefehl müssen Sie mindestens ein **Schlüsselattribut und einen Schlüsselwert** angeben. Verwenden Sie mehrere Schlüsselattribute, um Ihren Datenschlüssel unter mehreren Wrapping-Schlüsseln zu [**verschlüsseln**](#cli-many-cmks).  

```
aws-encryption-cli --encrypt --wrapping-keys key=1234abcd-12ab-34cd-56ef-1234567890ab key=1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d
```
In Verschlüsselungsbefehlen, die verwenden AWS KMS keys, kann der Wert von **key** die Schlüssel-ID, der zugehörige Schlüssel-ARN, ein Aliasname oder ein Alias-ARN sein. Dieser Verschlüsselungsbefehl beispielsweise verwendet einen Alias-ARN im Wert des **key**-Attributs. *Einzelheiten zu den Schlüsselbezeichnern für eine AWS KMS key finden Sie unter [Schlüsselkennungen im AWS Key Management Service Entwicklerhandbuch](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id).*  

```
aws-encryption-cli --encrypt --wrapping-keys key=arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias
```
In Entschlüsselungsbefehlen, die einen Kundenmasterschlüssel-Anbieter verwenden, müssen die **key**- und **provider**-Attribute angegeben werden.  

```
\\ Custom master key provider
aws-encryption-cli --decrypt --wrapping-keys provider='myProvider' key='100101'
```
In Decrypt-Befehlen, die verwenden AWS KMS, können Sie das **Schlüsselattribut** verwenden, um das für die Entschlüsselung AWS KMS keys zu verwendende Objekt anzugeben, oder das [**Discovery-Attribut**](#discovery-cli-attribute) mit dem Wert von`true`, sodass die AWS Encryption CLI jedes Attribut verwenden kann AWS KMS key , das zum Verschlüsseln der Nachricht verwendet wurde. Wenn Sie einen angeben AWS KMS key, muss es sich um einen der Wrapping-Schlüssel handeln, die zum Verschlüsseln der Nachricht verwendet wurden.   
Die Angabe des Umschließungsschlüssels ist eine [AWS Encryption SDK bewährte Methode](best-practices.md). Es stellt sicher, dass Sie das verwenden, AWS KMS key was Sie verwenden möchten.   
In einem Decrypt-Befehl muss der Wert des **Schlüsselattributs** ein [Schlüssel-ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) sein.   

```
\\ AWS KMS key
aws-encryption-cli --decrypt --wrapping-keys key=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
```

**Discovery: Verwenden Sie AWS KMS key bei der Entschlüsselung einen beliebigen**  <a name="discovery-cli-attribute"></a>
Wenn Sie die AWS KMS keys Verwendung beim Entschlüsseln nicht einschränken müssen, können Sie das **Discovery-Attribut** mit dem Wert von verwenden. `true` Ein Wert von `true` ermöglicht es der AWS Encryption CLI, die Nachricht mit jedem zu entschlüsseln, der AWS KMS key die Nachricht verschlüsselt hat. Wenn Sie kein **Discovery-Attribut** angeben, ist Discovery `false` (Standard). Das **Discovery-Attribut** ist nur in Entschlüsselungsbefehlen gültig und nur, wenn die Nachricht mit AWS KMS keys verschlüsselt wurde.  
Das **Discovery-Attribut** mit dem Wert von `true` ist eine Alternative zur Verwendung des **Schlüsselattributs** zur AWS KMS keys Spezifizierung. Beim Entschlüsseln einer mit AWS KMS keys verschlüsselten Nachricht muss jeder `--wrapping-keys` Parameter über ein **Schlüsselattribut** oder ein **Erkennungsattribut** mit einem Wert von`true`, aber nicht über beide verfügen.  
Wenn Discovery den Wert true hat, empfiehlt es sich, die Attribute **discovery-partition und **discovery-account**** zu verwenden, um die AWS KMS keys Verwendung auf die von Ihnen angegebenen Attribute zu beschränken. AWS-Konten Im folgenden Beispiel ermöglichen die **Discovery-Attribute** der AWS Encryption CLI, jedes AWS KMS key der angegebenen Werte zu verwenden AWS-Konten.  

```
aws-encryption-cli --decrypt --wrapping-keys \
    discovery=true \
    discovery-partition=aws \
    discovery-account=111122223333 \
    discovery-account=444455556666
```

**Anbieter: Geben Sie den Hauptschlüsselanbieter an**  
Das **provider**-Attribut identifiziert den [Masterschlüssel-Anbieter](concepts.md#master-key-provider). Der Standardwert ist `aws-kms` und steht für AWS KMS. Wenn Sie einen anderen Masterschlüsselanbieter verwenden, ist das **provider**-Attribut nicht erforderlich.  

```
--wrapping-keys key=12345 provider=my_custom_provider
```
Weitere Informationen zur Verwendung von benutzerdefinierten (Nicht-AWS KMS) Hauptschlüsselanbietern finden Sie im Thema **Erweiterte Konfiguration** in der [README-Datei](https://github.com/aws/aws-encryption-sdk-cli/blob/master/README.rst) für das [AWS Encryption CLI-Repository](https://github.com/aws/aws-encryption-sdk-cli/).

**Region: Geben Sie ein AWS-Region**  
Verwenden Sie das **Regionsattribut**, um die AWS-Region von einem anzugeben AWS KMS key. Dieses Attribut ist nur in Verschlüsselungsbefehlen und nur dann gültig, wenn der Masterschlüssel-Anbieter AWS KMS ist.   

```
--encrypt --wrapping-keys key=alias/primary-key region=us-east-2
```
AWS Verschlüsselungs-CLI-Befehle verwenden AWS-Region das, was im **Schlüsselattributwert** angegeben ist, wenn es eine Region enthält, z. B. einen ARN. Wenn der **Schlüsselwert** a angibt AWS-Region, wird das **Regionsattribut** ignoriert.  
Das **region**-Attribut hat Vorrang vor allen anderen Regionsangaben. Wenn Sie kein Regionsattribut verwenden, verwenden die Befehle der AWS Encryption CLI das in Ihrem AWS CLI [benannten Profil](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles), falls vorhanden, oder in Ihrem Standardprofil AWS-Region angegebene.

**Profil: Angabe eines benannten Profils**  
Verwenden Sie das **Profilattribut**, um ein AWS CLI [benanntes Profil](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) anzugeben. Benannte Profile können Anmeldeinformationen und eine enthalten AWS-Region. Dieses Attribut ist nur gültig, wenn der Masterschlüssel-Anbieter AWS KMS ist.   

```
--wrapping-keys key=alias/primary-key profile=admin-1
```
Sie können das **profile**-Attribut verwenden, um alternative Anmeldeinformationen in Ver- und Entschlüsselungsbefehlen anzugeben. **In einem Verschlüsselungsbefehl verwendet die AWS Verschlüsselungs-CLI das AWS-Region im benannten Profil nur, wenn der **Schlüsselwert** keine Region enthält und kein Regionsattribut vorhanden ist.** Bei einem Entschlüsselungsbefehl wird das AWS-Region im Namen angegebene Profil ignoriert.

### Wie spezifiziert man mehrere Wrapping-Schlüssel
<a name="cli-many-cmks"></a>

Sie können in jedem Befehl mehrere *Umbruchschlüssel (oder Hauptschlüssel*) angeben. 

Wenn Sie mehr als einen Umschließungsschlüssel angeben, generiert und verschlüsselt der erste Umschließungsschlüssel den Datenschlüssel, der zur Verschlüsselung Ihrer Daten verwendet wird. Die anderen Umschließungsschlüssel verschlüsseln denselben Datenschlüssel. Die daraus resultierende [verschlüsselte Nachricht](concepts.md#message) enthält die verschlüsselten Daten („Chiffretext“) und eine Sammlung verschlüsselter Datenschlüssel, von denen einer mit jedem Umschließungsschlüssel verschlüsselt wird. Jeder Wrapping kann einen verschlüsselten Datenschlüssel entschlüsseln und anschließend die Daten entschlüsseln.

Es gibt zwei Möglichkeiten, mehrere Wrapping-Schlüssel anzugeben: 
+ Schließen Sie mehrere **Schlüsselattribute** in den `--wrapping-keys` Parameterwert ein.

  ```
  $key_oregon=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
  $key_ohio=arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef
  
  --wrapping-keys key=$key_oregon key=$key_ohio
  ```
+ Verwendung von mehreren `--wrapping-keys`-Parametern im selben Befehl. Verwenden Sie diese Syntax, wenn die von Ihnen angegebenen Attributwerte nicht für alle Wrapping-Schlüssel im Befehl gelten.

  ```
  --wrapping-keys region=us-east-2 key=alias/test_key \
  --wrapping-keys region=us-west-1 key=alias/test_key
  ```

Das **Discovery-Attribut** mit einem Wert von `true` ermöglicht es der AWS Encryption CLI AWS KMS key , jedes Attribut zu verwenden, das die Nachricht verschlüsselt hat. Wenn Sie mehrere `--wrapping-keys` Parameter in demselben Befehl verwenden, werden durch die Verwendung eines `discovery=true` beliebigen `--wrapping-keys` Parameters die Grenzwerte des **Schlüsselattributs** in anderen `--wrapping-keys` Parametern effektiv außer Kraft gesetzt. 

Im folgenden Befehl begrenzt beispielsweise das **Schlüsselattribut** im ersten `--wrapping-keys` Parameter die AWS Verschlüsselungs-CLI auf den angegebenen Wert AWS KMS key. Das **Discovery-Attribut** im zweiten `--wrapping-keys` Parameter ermöglicht es der AWS Encryption CLI jedoch, jedes AWS KMS key der angegebenen Konten zum Entschlüsseln der Nachricht zu verwenden.

```
aws-encryption-cli --decrypt \
    --wrapping-keys key=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --wrapping-keys discovery=true \
                    discovery-partition=aws \
                    discovery-account=111122223333 \
                    discovery-account=444455556666
```

## Eingaben bereitstellen
<a name="crypto-cli-input"></a>

Der Verschlüsselungsvorgang in der AWS Encryption CLI verwendet Klartextdaten als Eingabe und gibt eine [verschlüsselte](concepts.md#message) Nachricht zurück. Die Entschlüsselungsoperation übernimmt eine verschlüsselte Nachricht als Eingabe und gibt Klartextdaten zurück. 

Der `--input` Parameter (`-i`), der der AWS Encryption CLI mitteilt, wo sich die Eingabe befindet, ist in allen AWS Encryption CLI-Befehlen erforderlich. 

Sie können Eingaben wie folgt bereitstellen:
+ Über eine Datei.

  ```
  --input myData.txt
  ```
+ Unter Verwendung eines Dateinamenmusters. 

  ```
  --input testdir/*.xml
  ```
+ Unter Verwendung eines Verzeichnisses oder Verzeichnisnamenmusters. Wenn die Eingabe ein Verzeichnis ist, muss der `--recursive`-Parameter (`-r`, `-R`) angegeben werden.

  ```
  --input testdir --recursive
  ```
+ Eingabe an den Befehl weiterleiten (stdin). Einen Wert von `-` für den `--input`-Parameter verwenden. (Der Parameter `--input` ist immer erforderlich.)

  ```
  echo 'Hello World' | aws-encryption-cli --encrypt --input -
  ```

## Den Ausgabespeicherort festlegen
<a name="crypto-cli-output"></a>

Der `--output` Parameter teilt der AWS Encryption CLI mit, wohin die Ergebnisse des Verschlüsselungs- oder Entschlüsselungsvorgangs geschrieben werden sollen. Es ist in jedem AWS Encryption CLI-Befehl erforderlich. Die AWS Encryption CLI erstellt für jede Eingabedatei im Vorgang eine neue Ausgabedatei. 

Wenn eine Ausgabedatei bereits existiert, gibt die AWS Encryption CLI standardmäßig eine Warnung aus und überschreibt dann die Datei. Um ein Überschreiben zu verhindern, verwenden Sie den Parameter `--interactive`, der Sie vor dem Überschreiben zur Bestätigung auffordert, oder `--no-overwrite`, der die Eingabe überspringt, wenn die Ausgabe ein Überschreiben verursachen würde. Um die Überschreibwarnung zu unterdrücken, verwenden Sie `--quiet`. Um Fehler und Warnungen aus der AWS Encryption CLI zu erfassen, verwenden Sie den `2>&1` Umleitungsoperator, um sie in den Ausgabestrom zu schreiben.

**Anmerkung**  
Befehle, die Ausgabedateien überschreiben, löschen zunächst die Ausgabedatei. Wenn der Befehl fehlschlägt, ist die Ausgabedatei möglicherweise bereits gelöscht.

Sie können den Ausgabespeicherort auf verschiedene Arten wählen.
+ Angabe eines Dateinamens. Wenn Sie einen Pfad zur Datei angeben, müssen alle Verzeichnisse im Pfad vorhanden sein, bevor der Befehl ausgeführt wird. 

  ```
  --output myEncryptedData.txt
  ```
+ Angabe eines Verzeichnisses. Die Ausgabeverzeichnis muss vorhanden sein, bevor der Befehl ausgeführt wird. 

  Wenn die Eingabe Unterverzeichnisse enthält, erzeugt der Befehl die Unterverzeichnisse unter dem angegebenen Verzeichnis.

  ```
  --output Test
  ```

  Wenn der Ausgabespeicherort ein Verzeichnis (ohne Dateinamen) ist, erstellt die AWS Encryption CLI Ausgabedateinamen auf der Grundlage der Eingabedateinamen plus einem Suffix. Verschlüsselungsoperationen fügen dem Eingabedateinamen `.encrypted` hinzu, Entschlüsselungsoperationen fügen `.decrypted` hinzu. Mit dem Parameter `--suffix` ändern Sie das Suffix.

  Wenn Sie z. B. `file.txt` verschlüsseln, erstellt der Verschlüsselungsbefehl `file.txt.encrypted`. Wenn Sie `file.txt.encrypted` entschlüsseln, erstellt der Entschlüsselungsbefehl `file.txt.encrypted.decrypted`.

   
+ In die Befehlszeile schreiben (stdout). Geben Sie einen Wert von `-` für den `--output`-Parameter ein. Sie können `--output -`verwenden , um die Ausgabe an einen anderen Befehl oder ein Programm weiterzuleiten.

  ```
  --output -
  ```

## Einen Verschlüsselungskontext verwenden
<a name="crypto-cli-encryption-context"></a>

Mit der AWS Encryption CLI können Sie einen Verschlüsselungskontext für Befehle zum Verschlüsseln und Entschlüsseln bereitstellen. Es ist nicht erforderlich, aber eine bewährte Methoden für die Kryptografie, die wir empfehlen.

Ein *Verschlüsselungskontext* ist eine Art zufälliger, nicht geheimer *zusätzlicher authentifizierter Daten*. In der AWS Encryption CLI besteht der Verschlüsselungskontext aus einer Sammlung von `name=value` Paaren. Sie können beliebigen Inhalt in den Paaren verwenden, einschließlich Informationen über die Dateien, Daten, die Ihnen helfen, den Verschlüsselungsvorgang in Protokollen zu finden, oder Daten, die Sie für Ihre Berechtigungen oder Richtlinien benötigen. 

**In einem Verschlüsselungsbefehl**

Der Verschlüsselungskontext, den Sie in einem Verschlüsselungsbefehl angeben, sowie alle weiteren Paare, die vom [CMM](concepts.md#crypt-materials-manager) hinzugefügt werden, sind kryptographisch an die verschlüsselten Daten gebunden. Er ist außerdem (in Klartext) in der [verschlüsselten Nachricht](concepts.md#encryption-context) enthalten, die den Befehl zurückgibt. Wenn Sie einen verwenden AWS KMS key, kann der Verschlüsselungskontext auch im Klartext in Prüfaufzeichnungen und Protokollen erscheinen, wie AWS CloudTrail z. 

Das folgende Beispiel zeigt einen Verschlüsselungskontext mit drei `name=value`-Paaren.

```
--encryption-context purpose=test dept=IT class=confidential 
```

**In einem Entschlüsselungsbefehl**

In einem Entschlüsselungsbefehl hilft Ihnen der Verschlüsselungskontext zu bestätigen, dass Sie die richtige verschlüsselte Nachricht entschlüsseln. 

Sie müssen in einem Entschlüsselungsbefehl keinen Verschlüsselungskontext angeben, auch wenn beim Verschlüsseln ein Verschlüsselungskontext verwendet wurde. In diesem Fall überprüft die AWS Encryption CLI jedoch, ob jedes Element im Verschlüsselungskontext des Decrypt-Befehls mit einem Element im Verschlüsselungskontext der verschlüsselten Nachricht übereinstimmt. Wenn ein Element nicht übereinstimmt, schlägt der Entschlüsselungsbefehl fehl. 

Beispielsweise entschlüsselt der folgende Befehl die verschlüsselte Nachricht nur, wenn ihr Verschlüsselungskontext `dept=IT` enthält.

```
aws-encryption-cli --decrypt --encryption-context dept=IT ...
```

Ein Verschlüsselungskontext ist ein wichtiger Teil Ihrer Sicherheitsstrategie. Wenn Sie jedoch einen Verschlüsselungskontext wählen, denken Sie jedoch daran, dass seine Werte nicht geheim sind. Nehmen Sie keine vertraulichen Daten in den Verschlüsselungskontext auf.

**So geben Sie einen Verschlüsselungskontext an**
+ Verwenden Sie in einem **encrypt**-Befehl den `--encryption-context`-Parameter mit einem oder mehreren `name=value`-Paaren. Verwenden Sie ein Leerzeichen, um die einzelnen Paare zu trennen. 

  ```
  --encryption-context name=value [name=value] ...
  ```
+ In einem **decrypt**-Befehl kann der `--encryption-context`-Parameterwert `name=value`-Paare, `name`-Elemente (ohne Werte) oder eine Kombination aus beidem enthalten.

  ```
  --encryption-context name[=value] [name] [name=value] ...
  ```

Wenn der `name` oder `value` in einem `name=value`-Paar Leerzeichen oder Sonderzeichen enthält, schließen Sie gesamte Paar in Anführungszeichen ein.

```
--encryption-context "department=software engineering" "AWS-Region=us-west-2"
```

Dieser Entschlüsselungsbefehl enthält beispielsweise einen Verschlüsselungskontext mit zwei Paaren, `purpose=test` und `dept=23`.

```
aws-encryption-cli --encrypt --encryption-context purpose=test dept=23 ...
```

Dieser Entschlüsselungsbefehl würde erfolgreich ausgeführt. Der Verschlüsselungskontext in den einzelnen Befehlen ist eine Teilmenge des ursprünglichen Verschlüsselungskontexts.

```
\\ Any one or both of the encryption context pairs
aws-encryption-cli --decrypt --encryption-context dept=23 ...

\\ Any one or both of the encryption context names
aws-encryption-cli --decrypt --encryption-context purpose ...

\\ Any combination of names and pairs
aws-encryption-cli --decrypt --encryption-context dept purpose=test ...
```

Diese Verschlüsselungsbefehle würden jedoch fehlschlagen. Der Verschlüsselungskontext in der verschlüsselten Nachricht enthält nicht die angegebenen Elemente.

```
aws-encryption-cli --decrypt --encryption-context dept=Finance ...
aws-encryption-cli --decrypt --encryption-context scope ...
```

## Wie spezifiziert man eine Verpflichtungsrichtlinie
<a name="crypto-cli-commitment-policy"></a>

Verwenden Sie den [`--commitment-policy`Parameter](crypto-cli-reference.md#syntax-commitment-policy), um die [Commitment-Richtlinie](concepts.md#commitment-policy) für den Befehl festzulegen. Dieser Parameter wurde in Version 1.8 eingeführt. *x.* Es ist gültig für Befehle zum Verschlüsseln und Entschlüsseln. Die von Ihnen festgelegte Verpflichtungsrichtlinie ist nur für den Befehl gültig, in dem sie vorkommt. Wenn Sie keine Commitment-Richtlinie für einen Befehl festlegen, verwendet die AWS Encryption CLI den Standardwert.

Mit dem folgenden Parameterwert wird die Commitment-Richtlinie beispielsweise auf festgelegt. Dabei wird immer mit Key Commitment verschlüsselt`require-encrypt-allow-decrypt`, Chiffretext, der mit oder ohne Key Commitment verschlüsselt wurde, jedoch entschlüsselt. 

```
--commitment-policy require-encrypt-allow-decrypt
```

## Parameter in einer Konfigurationsdatei speichern
<a name="crypto-cli-config-file"></a>

Sie können Zeit sparen und Tippfehler vermeiden, indem Sie häufig verwendete AWS Encryption CLI-Parameter und -Werte in Konfigurationsdateien speichern. 

Eine *Konfigurationsdatei* ist eine Textdatei, die Parameter und Werte für einen AWS Encryption CLI-Befehl enthält. Wenn Sie in einem AWS Encryption CLI-Befehl auf eine Konfigurationsdatei verweisen, wird die Referenz durch die Parameter und Werte in der Konfigurationsdatei ersetzt. Der Effekt ist der gleiche, als ob Sie den Dateiinhalt in der Befehlszeile eingegeben. Eine Konfigurationsdatei kann einen beliebigen Namen haben und sich in einem beliebigen Verzeichnis befinden, auf das der aktuelle Benutzer zugreifen kann. 

Die folgende Beispielkonfigurationsdatei,`key.conf`, gibt zwei AWS KMS keys in verschiedenen Regionen an.

```
--wrapping-keys key=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
--wrapping-keys key=arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef
```

Um die Konfigurationsdatei in einem Befehl zu verwenden, stellen sie dem Dateinamen ein At-Zeichen (`@`) voraus. Verwenden Sie in einer PowerShell Konsole ein Backtick-Zeichen, um das At-Zeichen (``@`) zu maskieren.

Dieser Beispielbefehl verwendet die Datei `key.conf` in einem Verschlüsselungsbefehl.

------
#### [ Bash ]

```
$ aws-encryption-cli -e @key.conf -i hello.txt -o testdir  
```

------
#### [ PowerShell ]

```
PS C:\> aws-encryption-cli -e `@key.conf -i .\Hello.txt -o .\TestDir
```

------

**Konfigurationsdateiregeln**

Für die Verwendung von Konfigurationsdateien gelten die folgenden Regeln:
+ Sie können mehrere Parameter in jede Konfigurationsdatei aufnehmen und in beliebiger Reihenfolge auflisten. Listen Sie jeden Parameter mit seinen Werten (falls vorhanden) in einer separaten Zeile auf. 
+ Verwenden Sie `#` zum Hinzufügen eines Kommentars für eine ganze oder einen Teil einer Zeile.
+ Sie können Verweise auf andere Konfigurationsdateien aufnehmen. Verwenden Sie kein Backtick, um dem `@` Zeichen zu entkommen, auch nicht in. PowerShell
+ Wenn Sie Anführungszeichen in einer Konfigurationsdatei verwenden, kann sich der angegebene Text nicht über mehrere Zeilen erstrecken.

Dies ist beispielsweise der Inhalt einer `encrypt.conf`-Beispieldatei.

```
# Archive Files
--encrypt
--output /archive/logs
--recursive
--interactive
--encryption-context class=unclassified dept=IT
--suffix  # No suffix
--metadata-output ~/metadata
@caching.conf  # Use limited caching
```

Sie können auch mehrere Konfigurationsdateien in einem Befehl angeben. Dieser Beispielbefehl verwendet die Konfigurationsdateien `encrypt.conf` und `master-keys.conf`.

------
#### [ Bash ]

```
$  aws-encryption-cli -i /usr/logs @encrypt.conf @master-keys.conf
```

------
#### [ PowerShell ]

```
PS C:\> aws-encryption-cli -i $home\Test\*.log `@encrypt.conf `@master-keys.conf
```

------

**Weiter:** [Probieren Sie die Beispiele für die AWS Verschlüsselungs-CLI](crypto-cli-examples.md) aus

# Beispiele für die AWS Encryption CLI
<a name="crypto-cli-examples"></a>

Verwenden Sie die folgenden Beispiele, um die AWS Encryption CLI auf der von Ihnen bevorzugten Plattform auszuprobieren. Weitere Informationen zum Master-Schlüssel und anderen Parametern finden Sie unter [So verwenden Sie die AWS Encryption CLI](crypto-cli-how-to.md). Informationen zum schnellen Einstieg finden Sie unter [AWS Encryption SDK CLI Syntax und Parameterreferenz](crypto-cli-reference.md).

**Anmerkung**  
Die folgenden Beispiele verwenden die Syntax für AWS Encryption CLI Version 2.1. *x.*   
Neue Sicherheitsfunktionen wurden ursprünglich in den AWS Encryption CLI Versionen 1.7 veröffentlicht. *x* und 2.0. *x.* Allerdings AWS Encryption CLI Version 1.8. *x* ersetzt Version 1.7. *x* und AWS Encryption CLI 2.1. *x* ersetzt 2.0. *x.* Einzelheiten finden Sie in der entsprechenden [Sicherheitsempfehlung](https://github.com/aws/aws-encryption-sdk-cli/security/advisories/GHSA-2xwp-m7mq-7q3r) im [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)Repository unter GitHub.

Ein Beispiel zur Verwendung der Sicherheitsfunktion, die verschlüsselte Datenschlüssel einschränkt, finden Sie unter[Beschränkung verschlüsselter Datenschlüssel](configure.md#config-limit-keys).

Ein Beispiel zur Verwendung von Schlüsseln für AWS KMS mehrere Regionen finden Sie unter[Verwenden Sie mehrere Regionen AWS KMS keys](configure.md#config-mrks).

**Topics**
+ [

## Verschlüsseln einer Datei
](#cli-example-encrypt-file)
+ [

## Entschlüsseln einer Datei
](#cli-example-decrypt-file)
+ [

## Alle Dateien in einem Verzeichnis verschlüsseln
](#cli-example-encrypt-directory)
+ [

## Alle Dateien in einem Verzeichnis entschlüsseln
](#cli-example-decrypt-directory)
+ [

## Verschlüsseln und Entschlüsseln in der Befehlszeile
](#cli-example-stdin)
+ [

## Verwenden mehrerer Hauptschlüssel
](#cli-example-multimaster)
+ [

## Verschlüsseln und Entschlüsseln in Skripts
](#cli-example-script)
+ [

## Verwenden von Datenschlüssel-Caching
](#cli-example-caching)

## Verschlüsseln einer Datei
<a name="cli-example-encrypt-file"></a>

In diesem Beispiel wird die AWS Encryption CLI verwendet, um den Inhalt der `hello.txt` Datei zu verschlüsseln, die eine Zeichenfolge „Hello World“ enthält. 

Wenn Sie einen Verschlüsselungsbefehl für eine Datei ausführen, ruft die AWS Encryption CLI den Inhalt der Datei ab, generiert einen eindeutigen [Datenschlüssel](concepts.md#DEK), verschlüsselt den Dateiinhalt unter dem Datenschlüssel und schreibt dann die [verschlüsselte Nachricht](concepts.md#message) in eine neue Datei. 

Der erste Befehl speichert den Schlüssel ARN von AWS KMS key in der `$keyArn` Variablen. Wenn Sie mit einem verschlüsseln AWS KMS key, können Sie es anhand einer Schlüssel-ID, eines Schlüssel-ARN, eines Aliasnamens oder eines Alias-ARN identifizieren. *Einzelheiten zu den Schlüsselkennungen für eine AWS KMS key finden Sie unter [Schlüsselkennungen](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) im AWS Key Management Service Entwicklerhandbuch.*

Der zweite Befehl verschlüsselt den Dateiinhalt. Der Befehl verwendet den Parameter `--encrypt`, um die Operation anzugeben, und den Parameter `--input`, um die zu verschlüsselnde Datei anzugeben. Der [`--wrapping-keys`Parameter](crypto-cli-how-to.md#crypto-cli-master-key) und das erforderliche **Schlüsselattribut** weisen den Befehl an, den durch den Schlüssel AWS KMS key repräsentierten ARN zu verwenden. 

Der Befehl verwendet den `--metadata-output`-Parameter, um eine Textdatei für die Metadaten über die Verschlüsselungsoperation anzugeben. Als bewährte Methode verwendet der Befehl den `--encryption-context`-Parameter, um einen [Verschlüsselungskontext](crypto-cli-how-to.md#crypto-cli-encryption-context) anzugeben. 

Dieser Befehl verwendet den [`--commitment-policy`Parameter](crypto-cli-reference.md#syntax-commitment-policy) auch, um die Commitment-Richtlinie explizit festzulegen. In Version 1.8. *x*, dieser Parameter ist erforderlich, wenn Sie den `--wrapping-keys` Parameter verwenden. Ab Version 2.1. *x*, der `--commitment-policy` Parameter ist optional, wird aber empfohlen.

Der Wert des `--output`-Parameters, ein Punkt (.), weist den Befehl an, die Ausgabedatei in das aktuelle Verzeichnis zu speichern. 

------
#### [ Bash ]

```
\\ To run this example, replace the fictitious key ARN with a valid value.
$ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

$ aws-encryption-cli --encrypt \
                     --input hello.txt \
                     --wrapping-keys key=$keyArn \
                     --metadata-output ~/metadata \
                     --encryption-context purpose=test \
                     --commitment-policy require-encrypt-require-decrypt \
                     --output .
```

------
#### [ PowerShell ]

```
# To run this example, replace the fictitious key ARN with a valid value.
PS C:\> $keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

PS C:\> aws-encryption-cli --encrypt `
                           --input Hello.txt `
                           --wrapping-keys key=$keyArn `
                           --metadata-output $home\Metadata.txt `
                           --commitment-policy require-encrypt-require-decrypt `
                           --encryption-context purpose=test `
                           --output .
```

------

Wenn der Verschlüsselungsbefehl erfolgreich ausgeführt wird, erfolgt keine Ausgabe. Um festzustellen, ob der Befehl erfolgreich ausgeführt wurde, überprüfen Sie den booleschen Wert in der Variablen `$?`. Wenn der Befehl erfolgreich ist, `$?` ist der Wert von `0` (Bash) oder `True` (PowerShell). Wenn der Befehl fehlschlägt, `$?` ist der Wert von ungleich Null (Bash) oder (). `False` PowerShell

------
#### [ Bash ]

```
$ echo $?
0
```

------
#### [ PowerShell ]

```
PS C:\> $?
True
```

------

Sie können auch einen Verzeichnisauflistungsbefehl ausführen, um zu überprüfen, ob der Verschlüsselungsbefehl eine neue Datei erstellt hat, `hello.txt.encrypted`. Da der Befehl encrypt keinen Dateinamen für die Ausgabe spezifizierte, schrieb die AWS Encryption CLI die Ausgabe in eine Datei mit demselben Namen wie die Eingabedatei plus einem `.encrypted` Suffix. Um ein anderes Suffix zu verwenden oder das Suffix wegzulassen, verwenden Sie den `--suffix`-Parameter.

Die Datei `hello.txt.encrypted` enthält eine [verschlüsselte Nachricht](concepts.md#message), die den Verschlüsselungstext der `hello.txt`-Datei enthält, eine verschlüsselte Kopie des Datenschlüssels und zusätzlichen Metadaten, einschließlich des Verschlüsselungskontexts.

------
#### [ Bash ]

```
$  ls
hello.txt  hello.txt.encrypted
```

------
#### [ PowerShell ]

```
PS C:\> dir

    Directory: C:\TestCLI

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        9/15/2017   5:57 PM             11 Hello.txt
-a----        9/17/2017   1:06 PM            585 Hello.txt.encrypted
```

------

## Entschlüsseln einer Datei
<a name="cli-example-decrypt-file"></a>

In diesem Beispiel wird die AWS Encryption CLI verwendet, um den Inhalt der `Hello.txt.encrypted` Datei zu entschlüsseln, die im vorherigen Beispiel verschlüsselt wurde.

Der Entschlüsselungsbefehl verwendet den Parameter `--decrypt`, um die Operation anzugeben, und den Parameter `--input`, um die zu entschlüsselnde Datei anzugeben. Der Wert des `--output` -Parameters ist ein Punkt, der das aktuelle Verzeichnis darstellt. 

Der `--wrapping-keys` Parameter mit einem **Schlüsselattribut** gibt den Wrapping-Schlüssel an, der zum Entschlüsseln der verschlüsselten Nachricht verwendet wird. Bei Entschlüsselungsbefehlen mit AWS KMS keys muss der Wert des Schlüsselattributs ein [Schlüssel-ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) sein. Der `--wrapping-keys` Parameter ist in einem Entschlüsselungsbefehl erforderlich. Wenn Sie verwenden AWS KMS keys, können Sie das **Schlüsselattribut** verwenden, um das AWS KMS keys Entschlüsselungsattribut anzugeben, oder das **Discovery-Attribut** mit einem Wert von `true` (aber nicht beide). Wenn Sie einen benutzerdefinierten Hauptschlüsselanbieter verwenden, sind die **Schlüssel** - und **Anbieterattribute** erforderlich. 

Der [`--commitment-policy`Parameter](crypto-cli-reference.md#syntax-commitment-policy) ist ab Version 2.1 optional. *x*, aber es wird empfohlen. Wenn Sie es explizit verwenden, wird Ihre Absicht deutlich, auch wenn Sie den Standardwert angeben`require-encrypt-require-decrypt`.

Der Parameter `--encryption-context` ist optional im Entschlüsselungsbefehl, auch dann, wenn im Verschlüsselungsbefehl ein [Verschlüsselungskontext](crypto-cli-how-to.md#crypto-cli-encryption-context) angegeben ist. In diesem Fall verwendet der Entschlüsselungsbefehl denselben Verschlüsselungskontext wie denjenigen, der im Verschlüsselungsbefehl angegeben wurde. Vor dem Entschlüsseln überprüft die AWS Encryption CLI, ob der Verschlüsselungskontext in der verschlüsselten Nachricht ein `purpose=test` Paar enthält. Wenn dies nicht der Fall ist, schlägt der Entschlüsselungsbefehl fehl.

Der `--metadata-output`-Parameter gibt eine Datei für Metadaten über die Entschlüsselungsoperation an. Der Wert des `--output`-Parameters, ein Punkt (.), weist den Befehl an, die Ausgabedatei in das aktuelle Verzeichnis zu schreiben. 

Es hat sich bewährt, den `--max-encrypted-data-keys` Parameter zu verwenden, um zu verhindern, dass eine falsch formatierte Nachricht mit einer übermäßigen Anzahl verschlüsselter Datenschlüssel entschlüsselt wird. Geben Sie die erwartete Anzahl verschlüsselter Datenschlüssel (einen für jeden bei der Verschlüsselung verwendeten Wrapping-Schlüssel) oder einen angemessenen Höchstwert (z. B. 5) an. Details hierzu finden Sie unter [Beschränkung verschlüsselter Datenschlüssel](configure.md#config-limit-keys).

Der `--buffer` gibt Klartext erst zurück, nachdem alle Eingaben verarbeitet wurden, einschließlich der Überprüfung der digitalen Signatur, falls eine vorhanden ist.

------
#### [ Bash ]

```
\\ To run this example, replace the fictitious key ARN with a valid value.
$ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

$ aws-encryption-cli --decrypt \
                     --input hello.txt.encrypted \
                     --wrapping-keys key=$keyArn \
                     --commitment-policy require-encrypt-require-decrypt \
                     --encryption-context purpose=test \
                     --metadata-output ~/metadata \
                     --max-encrypted-data-keys 1 \
                     --buffer \
                     --output .
```

------
#### [ PowerShell ]

```
\\ To run this example, replace the fictitious key ARN with a valid value.
PS C:\> $keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

PS C:\> aws-encryption-cli --decrypt `
                           --input Hello.txt.encrypted `
                           --wrapping-keys key=$keyArn `
                           --commitment-policy require-encrypt-require-decrypt `
                           --encryption-context purpose=test `
                           --metadata-output $home\Metadata.txt `
                           --max-encrypted-data-keys 1 `
                           --buffer `
                           --output .
```

------

Wenn der Entschlüsselungsbefehl erfolgreich ausgeführt wird, erfolgt keine Ausgabe. Um festzustellen, ob der Befehl erfolgreich ausgeführt wurde, rufen Sie den Wert der Variablen `$?` ab. Sie können auch einen Verzeichnisauflistungsbefehl ausführen, um zu überprüfen, ob der Verschlüsselungsbefehl eine neue Datei erstellt mit dem Suffix `.decrypted` erstellt hat. Um den Klartextinhalt anzuzeigen, verwenden Sie einen Befehl, um den Dateiinhalt abzurufen, wie beispielsweise `cat` oder [Get-Content](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-content).

------
#### [ Bash ]

```
$  ls
hello.txt  hello.txt.encrypted  hello.txt.encrypted.decrypted

$  cat hello.txt.encrypted.decrypted
Hello World
```

------
#### [ PowerShell ]

```
PS C:\> dir

    Directory: C:\TestCLI

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        9/17/2017   1:01 PM             11 Hello.txt
-a----        9/17/2017   1:06 PM            585 Hello.txt.encrypted
-a----        9/17/2017   1:08 PM             11 Hello.txt.encrypted.decrypted


PS C:\> Get-Content Hello.txt.encrypted.decrypted
Hello World
```

------

## Alle Dateien in einem Verzeichnis verschlüsseln
<a name="cli-example-encrypt-directory"></a>

In diesem Beispiel wird die AWS Encryption CLI verwendet, um den Inhalt aller Dateien in einem Verzeichnis zu verschlüsseln. 

Wenn sich ein Befehl auf mehrere Dateien auswirkt, verarbeitet die AWS Encryption CLI jede Datei einzeln. Sie ruft den Dateiinhalt ab, ruft einen eindeutigen [Datenschlüssel](concepts.md#DEK) für die Datei aus dem Master-Schlüssel ab, verschlüsselt den Inhalt der Datei unter dem Datenschlüssel und schreibt die Ergebnisse in eine neue Datei im Ausgabeverzeichnis. Aus diesem Grund können Sie die Ausgabedateien unabhängig voneinander entschlüsseln. 

Diese Auflistung des `TestDir`-Verzeichnisses zeigt die Klartext-Dateien, die wir verschlüsseln möchten. 

------
#### [ Bash ]

```
$  ls testdir
cool-new-thing.py  hello.txt  employees.csv
```

------
#### [ PowerShell ]

```
PS C:\> dir C:\TestDir

    Directory: C:\TestDir

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        9/12/2017   3:11 PM           2139 cool-new-thing.py
-a----        9/15/2017   5:57 PM             11 Hello.txt
-a----        9/17/2017   1:44 PM             46 Employees.csv
```

------

Der erste Befehl speichert den [Amazon-Ressourcennamen (ARN)](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html#find-cmk-id-arn) von AWS KMS key in der `$keyArn` Variablen.

Der zweite Befehl verschlüsselt den Inhalt von Dateien im `TestDir`-Verzeichnis und schreibt die Dateien mit dem verschlüsselten Inhalt in das `TestEnc`-Verzeichnis. Wenn das `TestEnc`-Verzeichnis nicht vorhanden ist, schlägt der Befehl fehl. Da der Eingabespeicherort ein Verzeichnis ist, muss der `--recursive`-Parameter angegeben werden. 

Der [`--wrapping-keys`Parameter](crypto-cli-how-to.md#crypto-cli-master-key) und das erforderliche **Schlüsselattribut** geben den zu verwendenden Wrapping-Schlüssel an. Der Verschlüsselungsbefehl umfasst einen [Verschlüsselungskontext](crypto-cli-how-to.md#crypto-cli-encryption-context), `dept=IT`. Wenn Sie einen Verschlüsselungskontext in einem Befehl angeben, der mehrere Dateien verschlüsselt, wird für alle Dateien derselbe Verschlüsselungskontext verwendet. 

Der Befehl hat auch einen `--metadata-output` Parameter, der der AWS Encryption CLI mitteilt, wo die Metadaten zu den Verschlüsselungsvorgängen geschrieben werden sollen. Die AWS Encryption CLI schreibt einen Metadatensatz für jede verschlüsselte Datei.

Das [`--commitment-policy parameter`](crypto-cli-how-to.md#crypto-cli-commitment-policy)ist ab Version 2.1 optional. *x*, aber es wird empfohlen. Wenn der Befehl oder das Skript fehlschlägt, weil ein Chiffretext nicht entschlüsselt werden kann, kann Ihnen die Richtlinieneinstellung „Explizite Commitment“ dabei helfen, das Problem schnell zu erkennen.

Wenn der Befehl abgeschlossen ist, schreibt die AWS Encryption CLI die verschlüsselten Dateien in das `TestEnc` Verzeichnis, gibt aber keine Ausgabe zurück. 

Der letzte Befehl listet die Dateien im Verzeichnis `TestEnc` auf. Es gibt eine Ausgabedatei des verschlüsselten Inhalts für jede Eingabedatei mit Klartext-Inhalt. Da der Befehl kein alternatives Suffix angegeben hat, hat der Verschlüsselungsbefehl `.encrypted` an jeden der jede der Eingabedateinamen angefügt.

------
#### [ Bash ]

```
# To run this example, replace the fictitious key ARN with a valid master key identifier.
$  keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

$ aws-encryption-cli --encrypt \
                     --input testdir --recursive\
                     --wrapping-keys key=$keyArn \
                     --encryption-context dept=IT \
                     --commitment-policy require-encrypt-require-decrypt \
                     --metadata-output ~/metadata \
                     --output testenc

$ ls testenc
cool-new-thing.py.encrypted  employees.csv.encrypted  hello.txt.encrypted
```

------
#### [ PowerShell ]

```
# To run this example, replace the fictitious key ARN with a valid master key identifier.
PS C:\> $keyArn = arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

PS C:\> aws-encryption-cli --encrypt `
                           --input .\TestDir --recursive `
                           --wrapping-keys key=$keyArn `
                           --encryption-context dept=IT `
                           --commitment-policy require-encrypt-require-decrypt `
                           --metadata-output .\Metadata\Metadata.txt `
                           --output .\TestEnc

PS C:\> dir .\TestEnc

    Directory: C:\TestEnc

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        9/17/2017   2:32 PM           2713 cool-new-thing.py.encrypted
-a----        9/17/2017   2:32 PM            620 Hello.txt.encrypted
-a----        9/17/2017   2:32 PM            585 Employees.csv.encrypted
```

------

## Alle Dateien in einem Verzeichnis entschlüsseln
<a name="cli-example-decrypt-directory"></a>

In diesem Beispiel werden alle Dateien in einem Verzeichnis entschlüsselt. Es beginnt mit den Dateien im Verzeichnis `TestEnc`, die im vorherigen Beispiel verschlüsselt wurden.

------
#### [ Bash ]

```
$  ls testenc
cool-new-thing.py.encrypted  hello.txt.encrypted  employees.csv.encrypted
```

------
#### [ PowerShell ]

```
PS C:\> dir C:\TestEnc

    Directory: C:\TestEnc

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        9/17/2017   2:32 PM           2713 cool-new-thing.py.encrypted
-a----        9/17/2017   2:32 PM            620 Hello.txt.encrypted
-a----        9/17/2017   2:32 PM            585 Employees.csv.encrypted
```

------

Dieser Entschlüsselungsbefehl entschlüsselt alle Dateien im TestEnc Verzeichnis und schreibt die Klartextdateien in das Verzeichnis. TestDec Der `--wrapping-keys` Parameter mit einem **Schlüsselattribut** und einem [Schlüssel-ARN-Wert](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) teilt der AWS Encryption CLI mit, welche AWS KMS keys zum Entschlüsseln der Dateien verwendet werden soll. Der Befehl verwendet den `--interactive` Parameter, um die AWS Encryption CLI anzuweisen, Sie vor dem Überschreiben einer Datei mit demselben Namen zu fragen.

Dieser Befehl verwendet auch den Verschlüsselungskontext, die bereitgestellt wurde, als die Dateien verschlüsselt wurden. Beim Entschlüsseln mehrerer Dateien überprüft die AWS Encryption CLI den Verschlüsselungskontext jeder Datei. Wenn die Überprüfung des Verschlüsselungskontextes für eine Datei fehlschlägt, lehnt die AWS Encryption CLI die Datei ab, schreibt eine Warnung, zeichnet den Fehler in den Metadaten auf und fährt dann mit der Überprüfung der verbleibenden Dateien fort. Wenn die AWS Encryption CLI eine Datei aus einem anderen Grund nicht entschlüsseln kann, schlägt der gesamte Entschlüsselungsbefehl sofort fehl. 

In diesem Beispiel enthalten die verschlüsselten Nachrichten in allen Eingabedateien das Verschlüsselungskontextelement `dept=IT`. Wenn Sie jedoch Nachrichten mit unterschiedlichen Verschlüsselungskontexten entschlüsseln, können Sie möglicherweise immer noch einen Teil des Verschlüsselungskontexts überprüfen. Hatten beispielsweise einige Nachrichten den Verschlüsselungskontext `dept=finance`, andere hatten `dept=IT`, könnten Sie überprüfen, ob der Verschlüsselungskontext immer einen `dept`-Namen enthält, ohne den Wert anzugeben. Wenn Sie spezifischer vorgehen möchten, können Sie die Dateien in separaten Befehlen entschlüsseln. 

Die Entschlüsselungsbefehl gibt keine Ausgabe zurück, aber Sie können einen Verzeichnislistenbefehl verwenden, um zu prüfen, ob der Befehl neue Dateien mit dem Suffix `.decrypted` erstellt hat. Um den Klartextinhalt anzuzeigen, verwenden Sie einen Befehl, um den Dateiinhalt abzurufen.

------
#### [ Bash ]

```
# To run this example, replace the fictitious key ARN with a valid master key identifier.
$ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

$ aws-encryption-cli --decrypt \
                     --input testenc --recursive \
                     --wrapping-keys key=$keyArn \
                     --encryption-context dept=IT \
                     --commitment-policy require-encrypt-require-decrypt \
                     --metadata-output ~/metadata \
                     --max-encrypted-data-keys 1 \
                     --buffer \
                     --output testdec --interactive

$ ls testdec
cool-new-thing.py.encrypted.decrypted  hello.txt.encrypted.decrypted  employees.csv.encrypted.decrypted
```

------
#### [ PowerShell ]

```
# To run this example, replace the fictitious key ARN with a valid master key identifier.
PS C:\> $keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

PS C:\> aws-encryption-cli --decrypt `
                           --input C:\TestEnc --recursive `
                           --wrapping-keys key=$keyArn `
                           --encryption-context dept=IT `
                           --commitment-policy require-encrypt-require-decrypt `
                           --metadata-output $home\Metadata.txt `
                           --max-encrypted-data-keys 1 `
                           --buffer `
                           --output C:\TestDec --interactive

PS C:\> dir .\TestDec


    Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        10/8/2017   4:57 PM           2139 cool-new-thing.py.encrypted.decrypted
-a----        10/8/2017   4:57 PM             46 Employees.csv.encrypted.decrypted
-a----        10/8/2017   4:57 PM             11 Hello.txt.encrypted.decrypted
```

------

## Verschlüsseln und Entschlüsseln in der Befehlszeile
<a name="cli-example-stdin"></a>

Diese Beispiele zeigen Ihnen, wie Sie Eingaben an Befehle übergeben (stdin) und Ausgaben in die Befehlszeile schreiben (stdout). Sie erklären, wie stdin und stdout in einem Befehl dargestellt werden, und wie die eingebauten Base64-Codierungstools verwendet werden, um zu verhindern, dass die Shell Nicht-ASCII-Zeichen falsch interpretiert.

Dieses Beispiel übergibt eine Klartext-Zeichenfolge an einen Verschlüsselungsbefehl und speichert die verschlüsselte Nachricht in einer Variablen. Dann übergibt es die verschlüsselte Nachricht in der Variablen an einen Entschlüsselungsbefehl, der seine Ausgabe in die Pipeline schreibt (stdout). 

Das Beispiel besteht aus drei Befehlen:
+ Der erste Befehl speichert den [Schlüssel ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) von AWS KMS key in der `$keyArn` Variablen.

------
#### [ Bash ]

  ```
  $  keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
  ```

------
#### [ PowerShell ]

  ```
  PS C:\> $keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
  ```

------

   
+ Der zweite Befehl übergibt die Zeichenfolge`Hello World`an den Verschlüsselungsbefehl weiter und speichert das Ergebnis in der Variablen `$encrypted`. 

  Die `--output` Parameter `--input` und sind in allen AWS Encryption CLI-Befehlen erforderlich. Um anzugeben, dass eine Eingabe dem Befehl übergeben wird (stdin), verwenden Sie einen Bindestrich (`-`) für den Wert des `--input`-Parameters. Um die Ausgabe in die Befehlszeile zu senden (stdout), verwenden Sie einen Bindestrich für den Wert des `--output`-Parameters. 

  Der `--encode`-Parameter bewirkt, dass die Ausgabe mit Base64 codiert wird, bevor sie zurückgegeben wird. Dadurch wird verhindert, dass die Shell interpretiert die Nicht-ASCII-Zeichen in der verschlüsselten Nachricht falsch interpretiert. 

  Da dieser Befehl ist nur ein Machbarkeitsnachweist ist, lassen wir den Verschlüsselungskontext weg und unterdrücken die Metadaten (`-S`). 

------
#### [ Bash ]

  ```
  $ encrypted=$(echo 'Hello World' | aws-encryption-cli --encrypt -S \
                                                        --input - --output - --encode \
                                                        --wrapping-keys key=$keyArn )
  ```

------
#### [ PowerShell ]

  ```
  PS C:\> $encrypted = 'Hello World' | aws-encryption-cli --encrypt -S `
                                                          --input - --output - --encode `
                                                          --wrapping-keys key=$keyArn
  ```

------

   
+ Der dritte Befehl übergibt die verschlüsselte Nachricht in der Variablen `$encrypted` an den Entschlüsselungsbefehl. 

  Dieser Entschlüsselungsbefehl verwendet `--input -`, um anzugeben, dass die Eingabe aus der Pipeline (stdin) kommt, und `--output -`, um die Ausgabe in die Pipeline zu senden (stdout). (Der Eingabeparameter verwendet den Speicherort der Eingabe, nicht die tatsächlich eingegebenen Bytes, Sie können also die Variable `$encrypted` nicht als Wert des `--input`-Parameters verwenden.) 

  In diesem Beispiel wird das **Discovery-Attribut** des `--wrapping-keys` Parameters verwendet, damit die AWS Encryption CLI jedes beliebige AWS KMS key zum Entschlüsseln der Daten verwenden kann. Es gibt keine [Verpflichtungsrichtlinie](concepts.md#commitment-policy) an, daher wird der Standardwert für Version 2.1 verwendet. *x* und später,`require-encrypt-require-decrypt`.

  Da die Ausgabe verschlüsselt und dann codiert wurde, verwendet der Entschlüsselungsbefehl den `--decode`-Parameter zum Decodieren der mit Base64 codierten Eingabe, bevor sie entschlüsselt wird. Sie können auch den `--decode`-Parameter verwenden, um mit Base64 codierte Eingaben zu decodieren, bevor sie verschlüsselt werden.

  Auch hier lässt der Befehl den Verschlüsselungskontext weg und unterdrückt die Metadaten (-`S`). 

------
#### [ Bash ]

  ```
  $  echo $encrypted | aws-encryption-cli --decrypt --wrapping-keys discovery=true --input - --output - --decode --buffer -S
  Hello World
  ```

------
#### [ PowerShell ]

  ```
  PS C:\> $encrypted | aws-encryption-cli --decrypt --wrapping-keys discovery=$true --input - --output - --decode --buffer -S
  Hello World
  ```

------

Sie können die Ver- und Entschlüsselungsoperationen auch in einem einzigen Befehl ohne die dazwischenliegende Variable durchführen. 

Wie im vorherigen Beispiel haben die Parameter `--input` und `--output` einen `-`-Wert, und der Befehl verwendet den `--encode`-Parameter, um die Ausgabe zu codieren, und den `--decode` Parameter, um die Eingabe zu decodieren.

------
#### [ Bash ]

```
$  keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

$  echo 'Hello World' |
          aws-encryption-cli --encrypt --wrapping-keys key=$keyArn --input - --output - --encode -S |
          aws-encryption-cli --decrypt --wrapping-keys discovery=true --input - --output - --decode -S
Hello World
```

------
#### [ PowerShell ]

```
PS C:\> $keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

PS C:\> 'Hello World' |
               aws-encryption-cli --encrypt --wrapping-keys key=$keyArn --input - --output - --encode -S |
               aws-encryption-cli --decrypt --wrapping-keys discovery=$true --input - --output - --decode -S
Hello World
```

------

## Verwenden mehrerer Hauptschlüssel
<a name="cli-example-multimaster"></a>

Dieses Beispiel zeigt, wie mehrere Masterschlüssel beim Verschlüsseln und Entschlüsseln von Daten in der AWS Encryption CLI verwendet werden. 

Wenn Sie mehrere Master-Schlüssel verwenden, um Daten zu verschlüsseln, kann einer der Master-Schlüssel verwendet werden, um die Daten zu entschlüsseln. Diese Strategie stellt sicher, dass Sie die Daten entschlüsseln können, selbst wenn einer der Master-Schlüssel nicht verfügbar ist. Wenn Sie die verschlüsselten Daten in mehreren speichern AWS-Regionen, können Sie mit dieser Strategie einen Hauptschlüssel in derselben Region verwenden, um die Daten zu entschlüsseln. 

Wenn Sie mit mehreren Master-Schlüsseln verschlüsseln, spielt der erste Master-Schlüssel eine spezielle Rolle. Er generiert den Datenschlüssel, der zum Verschlüsseln der Daten verwendet wird. Die verbleibenden Master-Schlüssel verschlüsseln den Klartext-Datenschlüssel. Die resultierende [verschlüsselte Nachricht](concepts.md#message) enthält die verschlüsselten Daten und eine Sammlung von verschlüsselten Datenschlüsseln, einen für jeden Master-Schlüssel. Obwohl der erste Master-Schlüssel den Datenschlüssel generiert hat, kann jeder der Master-Schlüssel einen der Datenschlüssel entschlüsseln, der verwendet werden kann, um die Daten zu entschlüsseln. 

**Verschlüsselung mit drei Hauptschlüsseln**

In diesem Beispielbefehl werden drei Umschließungsschlüssel verwendet, um die `Finance.log` Datei zu verschlüsseln, jeweils einen von dreien. AWS-Regionen

Er schreibt die verschlüsselte Nachricht in das Verzeichnis `Archive`. Der Befehl verwendet den `--suffix` -Parameter ohne Wert, um das Suffix zu unterdrücken, sodass die Eingabe- und Ausgabedateinamen gleich sind. 

Der Befehl verwendet den `--wrapping-keys`-Parameter mit drei **Schlüsselattributen**. Sie können auch mehrere `--wrapping-keys`-Parameter im selben Befehl verwenden. 

Um die Protokolldatei zu verschlüsseln, fordert die AWS Encryption CLI den ersten Wrapping-Schlüssel in der Liste auf`$key1`, den Datenschlüssel zu generieren, mit dem sie die Daten verschlüsselt. Anschließend verwendet sie jeden der anderen Umschließungsschlüssel, um eine Klartextkopie desselben Datenschlüssels zu verschlüsseln. Die verschlüsselte Nachricht in der Ausgabedatei enthält alle drei verschlüsselten Datenschlüssel. 

------
#### [ Bash ]

```
$ key1=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
$ key2=arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef
$ key3=arn:aws:kms:ap-southeast-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d

$ aws-encryption-cli --encrypt --input /logs/finance.log \
                               --output /archive --suffix \
                               --encryption-context class=log \
                               --metadata-output ~/metadata \
                               --wrapping-keys key=$key1 key=$key2 key=$key3
```

------
#### [ PowerShell ]

```
PS C:\> $key1 = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
PS C:\> $key2 = 'arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef'
PS C:\> $key3 = 'arn:aws:kms:ap-southeast-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d'

PS C:\> aws-encryption-cli --encrypt --input D:\Logs\Finance.log `
                           --output D:\Archive --suffix `
                           --encryption-context class=log `
                           --metadata-output $home\Metadata.txt `
                           --wrapping-keys key=$key1 key=$key2 key=$key3
```

------

Dieser Befehl entschlüsselt die verschlüsselte Kopie der Datei `Finance.log` und schreibt sie in eine `Finance.log.clear`-Datei im Verzeichnis `Finance`. Um Daten zu entschlüsseln, die unter drei verschlüsselt wurden AWS KMS keys, können Sie dieselben drei AWS KMS keys oder eine beliebige Teilmenge davon angeben. In diesem Beispiel wird nur eine der Optionen angegeben. AWS KMS keys

Verwenden Sie das **Schlüsselattribut** des `--wrapping-keys` Parameters, AWS KMS keys um der AWS Encryption CLI mitzuteilen, welche zum Entschlüsseln Ihrer Daten verwendet werden soll. Bei der Entschlüsselung mit AWS KMS keys muss der Wert des **Schlüsselattributs** ein [Schlüssel-ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) sein.

Sie benötigen die Berechtigung, die [Decrypt-API](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) auf dem von AWS KMS keys Ihnen angegebenen Computer aufzurufen. Weitere Informationen finden Sie unter [Authentifizierung und Zugriffskontrolle für AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html). 

Als bewährte Methode wird in diesen Beispielen der `--max-encrypted-data-keys` Parameter verwendet, um zu verhindern, dass eine falsch formatierte Nachricht mit einer übermäßigen Anzahl verschlüsselter Datenschlüssel entschlüsselt wird. Obwohl in diesem Beispiel nur ein Wrapping-Schlüssel für die Entschlüsselung verwendet wird, hat die verschlüsselte Nachricht drei (3) verschlüsselte Datenschlüssel, einen für jeden der drei beim Verschlüsseln verwendeten Wrapping-Schlüssel. Geben Sie die erwartete Anzahl verschlüsselter Datenschlüssel oder einen angemessenen Höchstwert an, z. B. 5. Wenn Sie einen Höchstwert unter 3 angeben, schlägt der Befehl fehl. Details hierzu finden Sie unter [Beschränkung verschlüsselter Datenschlüssel](configure.md#config-limit-keys).

------
#### [ Bash ]

```
$ aws-encryption-cli --decrypt --input /archive/finance.log \
                     --wrapping-keys key=$key1 \
                     --output /finance --suffix '.clear' \
                     --metadata-output ~/metadata \
                     --max-encrypted-data-keys 3 \
                     --buffer \
                     --encryption-context class=log
```

------
#### [ PowerShell ]

```
PS C:\> aws-encryption-cli --decrypt `
                           --input D:\Archive\Finance.log `
                           --wrapping-keys key=$key1 `
                           --output D:\Finance --suffix '.clear' `
                           --metadata-output .\Metadata\Metadata.txt `
                           --max-encrypted-data-keys 3 `
                           --buffer `
                           --encryption-context class=log
```

------

## Verschlüsseln und Entschlüsseln in Skripts
<a name="cli-example-script"></a>

Dieses Beispiel zeigt, wie die AWS Encryption CLI in Skripten verwendet wird. Sie können Skripte schreiben, die nur Daten verschlüsseln und entschlüsseln, oder Skripts, die als Teil eines Datenverwaltungsprozesses verschlüsseln oder entschlüsseln.

In diesem Beispiel ruft das Skript eine Sammlung von Protokolldateien ab, komprimiert sie, verschlüsselt sie und kopiert dann die verschlüsselten Dateien in einen Amazon S3 S3-Bucket. Dieses Skript verarbeitet jede Datei einzeln, sodass Sie sie unabhängig voneinander entschlüsseln und erweitern können.

Wenn Sie Dateien komprimieren und verschlüsseln, stellen Sie sicher, dass Sie sie komprimieren, bevor Sie sie verschlüsseln. Ordnungsgemäß verschlüsselte Daten können nicht komprimiert werden.

**Warnung**  
Seien Sie vorsichtig, wenn Sie Daten komprimieren, die Geheimnisse oder Daten enthalten, die von böswilligen Angreifern kontrolliert werden könnten. Die endgültige Größe der komprimierten Daten verrät möglicherweise versehentlich vertrauliche Informationen über ihren Inhalt.

------
#### [ Bash ]

```
# Continue running even if an operation fails.
set +e

dir=$1
encryptionContext=$2
s3bucket=$3
s3folder=$4
masterKeyProvider="aws-kms"
metadataOutput="/tmp/metadata-$(date +%s)"

compress(){
    gzip -qf $1
}

encrypt(){
    # -e encrypt
    # -i input
    # -o output
    # --metadata-output unique file for metadata
    # -m masterKey read from environment variable
    # -c encryption context read from the second argument.
    # -v be verbose
    aws-encryption-cli -e -i ${1} -o $(dirname ${1}) --metadata-output ${metadataOutput} -m key="${masterKey}" provider="${masterKeyProvider}" -c "${encryptionContext}" -v
}


s3put (){
    # copy file argument 1 to s3 location passed into the script.
    aws s3 cp ${1} ${s3bucket}/${s3folder}
}

# Validate all required arguments are present.
if [ "${dir}" ] && [ "${encryptionContext}" ] && [ "${s3bucket}" ] && [ "${s3folder}" ] && [ "${masterKey}" ]; then

# Is $dir a valid directory?
test -d "${dir}"
if [ $? -ne 0 ]; then
    echo "Input is not a directory; exiting"
    exit 1
fi

# Iterate over all the files in the directory, except *gz and *encrypted (in case of a re-run).
for f in $(find ${dir} -type f \( -name "*" ! -name \*.gz ! -name \*encrypted \) ); do
    echo "Working on $f"
    compress ${f}
    encrypt ${f}.gz
    rm -f ${f}.gz
    s3put ${f}.gz.encrypted
done;
else
    echo "Arguments: <Directory> <encryption context> <s3://bucketname> <s3 folder>"
    echo " and ENV var \$masterKey must be set"
    exit 255
fi
```

------
#### [ PowerShell ]

```
#Requires -Modules AWSPowerShell, Microsoft.PowerShell.Archive
Param
(
    [Parameter(Mandatory)]
    [ValidateScript({Test-Path $_})]
    [String[]]
    $FilePath,

    [Parameter()]
    [Switch]
    $Recurse,

    [Parameter(Mandatory=$true)]
    [String]
    $wrappingKeyID,

    [Parameter()]
    [String]
    $masterKeyProvider = 'aws-kms',

    [Parameter(Mandatory)]
    [ValidateScript({Test-Path $_})]
    [String]
    $ZipDirectory,

    [Parameter(Mandatory)]
    [ValidateScript({Test-Path $_})]
    [String]
    $EncryptDirectory,

    [Parameter()]
    [String]
    $EncryptionContext,

    [Parameter(Mandatory)]
    [ValidateScript({Test-Path $_})]
    [String]
    $MetadataDirectory,

    [Parameter(Mandatory)]
    [ValidateScript({Test-S3Bucket -BucketName $_})]
    [String]
    $S3Bucket,

    [Parameter()]
    [String]
    $S3BucketFolder
)

BEGIN {}
PROCESS {
    if ($files = dir $FilePath -Recurse:$Recurse)
    {

        # Step 1: Compress
        foreach ($file in $files)
        {
            $fileName = $file.Name
            try
            {
                Microsoft.PowerShell.Archive\Compress-Archive -Path $file.FullName -DestinationPath $ZipDirectory\$filename.zip
            }
            catch
            {
                Write-Error "Zip failed on $file.FullName"
            }

            # Step 2: Encrypt
            if (-not (Test-Path "$ZipDirectory\$filename.zip"))
            {
                Write-Error "Cannot find zipped file: $ZipDirectory\$filename.zip"
            }
            else
            {
                # 2>&1 captures command output
                $err = (aws-encryption-cli -e -i "$ZipDirectory\$filename.zip" `
                                           -o $EncryptDirectory `
                                           -m key=$wrappingKeyID provider=$masterKeyProvider `
                                           -c $EncryptionContext `
                                           --metadata-output $MetadataDirectory `
                                           -v) 2>&1

                # Check error status
                if ($? -eq $false)
                {
                    # Write the error
                    $err
                }
                elseif (Test-Path "$EncryptDirectory\$fileName.zip.encrypted")
                {
                    # Step 3: Write to S3 bucket
                    if ($S3BucketFolder)
                    {
                        Write-S3Object -BucketName $S3Bucket -File "$EncryptDirectory\$fileName.zip.encrypted" -Key "$S3BucketFolder/$fileName.zip.encrypted"

                    }
                    else
                    {
                        Write-S3Object -BucketName $S3Bucket -File "$EncryptDirectory\$fileName.zip.encrypted"
                    }
                }
            }
        }
    }
}
```

------

## Verwenden von Datenschlüssel-Caching
<a name="cli-example-caching"></a>

Dieses Beispiel verwendet das [Datenschlüssel-Caching](data-key-caching.md) in einem Befehl, der eine große Anzahl von Dateien verschlüsselt. 

Standardmäßig generiert die AWS Encryption CLI (und andere Versionen von AWS Encryption SDK) einen eindeutigen Datenschlüssel für jede Datei, die sie verschlüsselt. Obwohl die Verwendung eines eindeutigen Datenschlüssels für jede Operation ist eine bewährte Methode in der Kryptografie ist, ist eine begrenzte Wiederverwendung von Datenschlüsseln in einigen Situationen akzeptabel. Falls Sie ein Datenschlüssel-Caching in Betracht ziehen, beraten Sie sich mit einem Sicherheitstechniker,um die Sicherheitsanforderungen Ihrer Anwendung zu verstehen und die für Sie geeigneten Sicherheitsbarrieren zu bestimmen. 

In diesem Beispiel beschleunigt das Datenschlüssel-Caching die Verschlüsselungsoperation, indem sie die Frequenz der Anfragen an den Masterschlüssel-Anbieter reduziert.

Der Befehl in diesem Beispiel verschlüsselt ein großes Verzeichnis mit mehreren Unterverzeichnissen, die insgesamt ungefähr 800 kleine Protokolldateien enthalten. Der erste Befehl speichert den ARN des AWS KMS key in einer `keyARN`-Variablen. Der zweite Befehl verschlüsselt alle Dateien im Eingabeverzeichnis (rekursiv) und schreibt sie in ein Archiv-Verzeichnis. Der Befehl verwendet den `--suffix` -Parameter, um das `.archive`-Suffix anzugeben. 

Der `--caching`-Parameter aktiviert das Datenschlüssel-Caching. Die Attribut **capacity**, das die Anzahl der Datenschlüssel im Cache begrenzt, wird auf 1 gesetzt, da die serielle Dateiverarbeitung nie mehr als einen Datenschlüssel gleichzeitig verwendet. Das Attribut **max\$1age**, mit dem festgelegt wird, wie lange der Datenschlüssel im Cache verwendet werden kann, ist auf 10 Sekunden eingestellt. 

Das optionale Attribut **max\$1messages\$1encrypted** ist auf 10 Nachrichten festgelegt, sodass eine einzelner Datenschlüssel nie verwendet werden kann, um mehr als 10 Dateien zu verschlüsseln. Die Begrenzung der Anzahl der von einem Datenschlüssel verschlüsselten Dateien reduziert die Anzahl der Dateien, die in dem unwahrscheinlichen Fall betroffen wären, wenn ein Datenschlüssel kompromittiert wird.

Um diesen Befehl für von Ihrem Betriebssystem generierte Protokolldateien auszuführen, müssen Sie möglicherweise Administratorberechtigungen besitzen (`sudo` in Linux; **Als Administrator ausführen** in Windows).

------
#### [ Bash ]

```
$  keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

$  aws-encryption-cli --encrypt \
                      --input /var/log/httpd --recursive \
                      --output ~/archive --suffix .archive \
                      --wrapping-keys key=$keyArn \
                      --encryption-context class=log \
                      --suppress-metadata \
                      --caching capacity=1 max_age=10 max_messages_encrypted=10
```

------
#### [ PowerShell ]

```
PS C:\> $keyARN = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

PS C:\> aws-encryption-cli --encrypt `
                           --input C:\Windows\Logs --recursive `
                           --output $home\Archive --suffix '.archive' `
                           --wrapping-keys key=$keyARN `
                           --encryption-context class=log `
                           --suppress-metadata `
                           --caching capacity=1 max_age=10 max_messages_encrypted=10
```

------

Um die Wirkung der Zwischenspeicherung von Datenschlüsseln zu testen, wird in diesem Beispiel das [Cmdlet Measure-Command](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/measure-command) in verwendet. PowerShell Wenn Sie dieses Beispiel ohne Datenschlüssel-Caching ausführen, dauert seine Ausführung etwa 25 Sekunden. Dieser Prozess generiert einen neuen Datenschlüssel für jede Datei im Verzeichnis.

```
PS C:\> Measure-Command {aws-encryption-cli --encrypt `
                                            --input C:\Windows\Logs --recursive `
                                            --output $home\Archive  --suffix '.archive' `
                                            --wrapping-keys key=$keyARN `
                                            --encryption-context class=log `
                                            --suppress-metadata }


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 25
Milliseconds      : 453
Ticks             : 254531202
TotalDays         : 0.000294596298611111
TotalHours        : 0.00707031116666667
TotalMinutes      : 0.42421867
TotalSeconds      : 25.4531202
TotalMilliseconds : 25453.1202
```

Das Datenschlüssel-Caching beschleunigt das Verfahren, auch wenn Sie die einzelnen Datenschlüssel auf maximal 10 Dateien begrenzen. Der Befehl benötigt jetzt weniger als 12 Sekunden und reduziert die Anzahl der Aufrufe des Masterschlüssel-Anbieter auf ein Zehntel des ursprünglichen Werts.

```
PS C:\> Measure-Command {aws-encryption-cli --encrypt `
                                            --input C:\Windows\Logs --recursive `
                                            --output $home\Archive  --suffix '.archive' `
                                            --wrapping-keys key=$keyARN `
                                            --encryption-context class=log `
                                            --suppress-metadata `
                                            --caching capacity=1 max_age=10 max_messages_encrypted=10}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 11
Milliseconds      : 813
Ticks             : 118132640
TotalDays         : 0.000136727592592593
TotalHours        : 0.00328146222222222
TotalMinutes      : 0.196887733333333
TotalSeconds      : 11.813264
TotalMilliseconds : 11813.264
```

Wenn Sie die `max_messages_encrypted`-Einschränkung weglassen, werden alle Dateien unter demselben Datenschlüssel verschlüsselt. Diese Änderung erhöht das Risiko einer Wiederverwendung von Datenschlüsseln, ohne den Prozess sehr wesentlich schneller zu machen. Sie reduziert jedoch die Anzahl der Aufrufe des Masterschlüssel-Anbieters auf 1.

```
PS C:\> Measure-Command {aws-encryption-cli --encrypt `
                                            --input C:\Windows\Logs --recursive `
                                            --output $home\Archive  --suffix '.archive' `
                                            --wrapping-keys key=$keyARN `
                                            --encryption-context class=log `
                                            --suppress-metadata `
                                            --caching capacity=1 max_age=10}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 10
Milliseconds      : 252
Ticks             : 102523367
TotalDays         : 0.000118661304398148
TotalHours        : 0.00284787130555556
TotalMinutes      : 0.170872278333333
TotalSeconds      : 10.2523367
TotalMilliseconds : 10252.3367
```

# AWS Encryption SDK CLI Syntax und Parameterreferenz
<a name="crypto-cli-reference"></a>

Dieses Thema enthält Syntaxdiagramme und kurze Parameterbeschreibungen, die Ihnen bei der Verwendung des AWS Encryption SDK Command Line Interface (CLI, Befehlszeilenschnittstelle) helfen. Hilfe zum Umschließen von Schlüsseln und anderen Parametern finden Sie unter[So verwenden Sie die AWS Encryption CLI](crypto-cli-how-to.md). Beispiele finden Sie unter [Beispiele für die AWS Encryption CLI](crypto-cli-examples.md). Eine vollständige Dokumentation finden Sie in [Read the Docs](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/).

**Topics**
+ [

## AWS Verschlüsselungs-CLI-Syntax
](#crypto-cli-syntax)
+ [

## AWS Befehlszeilenparameter der Verschlüsselungs-CLI
](#crypto-cli-parameters)
+ [

## Erweiterte Parameter
](#cli-advanced-parameters)

## AWS Verschlüsselungs-CLI-Syntax
<a name="crypto-cli-syntax"></a>

Diese Syntaxdiagramme von AWS Encryption CLI zeigen die Syntax für jede Aufgabe, die Sie mit der AWS Encryption CLI ausführen. Sie stellen die empfohlene Syntax in AWS Encryption CLI Version 2.1 dar. *x* und höher.

Neue Sicherheitsfunktionen wurden ursprünglich in den AWS Encryption CLI Versionen 1.7 veröffentlicht. *x* und 2.0. *x.* Allerdings AWS Encryption CLI Version 1.8. *x* ersetzt Version 1.7. *x* und AWS Encryption CLI 2.1. *x* ersetzt 2.0. *x.* Einzelheiten finden Sie in der entsprechenden [Sicherheitsempfehlung](https://github.com/aws/aws-encryption-sdk-cli/security/advisories/GHSA-2xwp-m7mq-7q3r) im [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)Repository unter GitHub.

**Anmerkung**  
Sofern in der Parameterbeschreibung nichts anderes angegeben ist, kann jeder Parameter oder jedes Attribut in jedem Befehl nur einmal verwendet werden.  
Wenn Sie ein Attribut verwenden, das ein Parameter nicht unterstützt, ignoriert die AWS Encryption CLI dieses nicht unterstützte Attribut ohne Warnung oder Fehler.

**Hilfe anfordern**  
Um die vollständige AWS Encryption CLI-Syntax mit Parameterbeschreibungen zu erhalten, verwenden Sie `--help` oder`-h`.  

```
aws-encryption-cli (--help | -h)
```

**Die Version abrufen**  
Um die Versionsnummer Ihrer AWS Encryption CLI-Installation abzurufen, verwenden Sie`--version`. Geben Sie unbedingt die Version an, wenn Sie Fragen stellen, Probleme melden oder Tipps zur Verwendung der AWS Encryption CLI geben.  

```
aws-encryption-cli --version
```

**Daten verschlüsseln**  
Das folgende Syntaxdiagramm zeigt die Parameter, die ein **encrypt**-Befehl verwendet.   

```
aws-encryption-cli --encrypt
                   --input <input> [--recursive] [--decode]
                   --output <output> [--interactive] [--no-overwrite] [--suffix [<suffix>]] [--encode]
                   --wrapping-keys  [--wrapping-keys] ...
                       key=<keyID> [key=<keyID>] ...
                       [provider=<provider-name>] [region=<aws-region>] [profile=<aws-profile>]
                   --metadata-output <location> [--overwrite-metadata] | --suppress-metadata]
                   [--commitment-policy <commitment-policy>]
                   [--encryption-context <encryption_context> [<encryption_context> ...]]
                   [--max-encrypted-data-keys <integer>]
                   [--algorithm <algorithm_suite>]
                   [--caching <attributes>] 
                   [--frame-length <length>]
                   [-v | -vv | -vvv | -vvvv]
                   [--quiet]
```

**Daten entschlüsseln**  
Das folgende Syntaxdiagramm zeigt die Parameter, die ein **decrypt**-Befehl verwendet.   
In Version 1.8. *x*, der `--wrapping-keys` Parameter ist beim Entschlüsseln optional, wird aber empfohlen. Ab Version 2.1. *x*, der `--wrapping-keys` Parameter ist beim Verschlüsseln und Entschlüsseln erforderlich. Denn Sie können das **Schlüsselattribut** verwenden AWS KMS keys, um Wrapping-Schlüssel anzugeben (Best Practice) oder das **Discovery-Attribut** auf festlegen`true`, wodurch die Wrapping-Schlüssel, die die AWS Encryption CLI verwenden kann, nicht eingeschränkt werden.  

```
aws-encryption-cli --decrypt (or [--decrypt-unsigned]) 
                   --input <input> [--recursive] [--decode]
                   --output <output> [--interactive] [--no-overwrite]  [--suffix [<suffix>]] [--encode]           
                   --wrapping-keys  [--wrapping-keys] ...
                       [key=<keyID>] [key=<keyID>] ...
                       [discovery={true|false}] [discovery-partition=<aws-partition-name> discovery-account=<aws-account-ID> [discovery-account=<aws-account-ID>] ...] 
                       [provider=<provider-name>] [region=<aws-region>] [profile=<aws-profile>]
                   --metadata-output <location> [--overwrite-metadata] | --suppress-metadata]
                   [--commitment-policy <commitment-policy>]
                   [--encryption-context <encryption_context> [<encryption_context> ...]]
                   [--buffer]
                   [--max-encrypted-data-keys <integer>]
                   [--caching <attributes>]
                   [--max-length <length>]
                   [-v | -vv | -vvv | -vvvv]
                   [--quiet]
```

**Konfigurationsdateien verwenden**  
Sie können auf Konfigurationsdateien verweisen, die Parameter und deren Werte enthalten. Dies ist gleichwertig mit der Eingabe der Parameter und Werte im Befehl. Ein Beispiel finden Sie unter [Parameter in einer Konfigurationsdatei speichern](crypto-cli-how-to.md#crypto-cli-config-file).  

```
aws-encryption-cli @<configuration_file>

# In a PowerShell console, use a backtick to escape the @.
aws-encryption-cli `@<configuration_file>
```

## AWS Befehlszeilenparameter der Verschlüsselungs-CLI
<a name="crypto-cli-parameters"></a>

Diese Liste enthält eine grundlegende Beschreibung der Befehlsparameter von AWS Encryption CLI. Eine vollständige Beschreibung finden Sie in der [aws-encryption-sdk-cliDokumentation](http://aws-encryption-sdk-cli.readthedocs.io/en/latest/).

**--encrypt (-e)**  
Verschlüsselt die Eingabedaten. Jeder Befehl muss einen `--encrypt``--decrypt`, oder oder `--decrypt-unsigned` -Parameter haben.

**--decrypt (-d)**  
Entschlüsselt die Eingabedaten. Jeder Befehl muss einen `--encrypt``--decrypt`, oder `--decrypt-unsigned` -Parameter haben.

**--decrypt-unsigned [Eingeführt in Version 1.9. *x und 2.2.* *x*]**  
Der `--decrypt-unsigned` Parameter entschlüsselt Chiffretext und stellt sicher, dass Nachrichten vor der Entschlüsselung unsigniert sind. Verwenden Sie diesen Parameter, wenn Sie den `--algorithm` Parameter verwendet und eine Algorithmussuite ohne digitale Signatur zum Verschlüsseln von Daten ausgewählt haben. Wenn der Chiffretext signiert ist, schlägt die Entschlüsselung fehl.  
Sie können `--decrypt` oder `--decrypt-unsigned` für die Entschlüsselung verwenden, aber nicht beide.

**--wrapping-keys (-w) [Eingeführt in Version 1.8. *x*]**  <a name="wrapping-keys"></a>
Gibt die [Wrapping-Schlüssel](concepts.md#master-key) (oder *Hauptschlüssel*) an, die bei Verschlüsselungs- und Entschlüsselungsvorgängen verwendet werden. Sie können in jedem Befehl [mehrere `--wrapping-keys` Parameter](crypto-cli-how-to.md#cli-many-cmks) verwenden.   
Ab Version 2.1. *x*, der `--wrapping-keys` Parameter ist für Befehle zum Verschlüsseln und Entschlüsseln erforderlich. In Version 1.8. *x*, Verschlüsselungsbefehle erfordern `--wrapping-keys` entweder einen `--master-keys` Oder-Parameter. In Version 1.8. *x* decrypt-Befehle, ein `--wrapping-keys` Parameter ist optional, wird aber empfohlen.   
**Wenn Sie einen benutzerdefinierten Hauptschlüsselanbieter verwenden, benötigen Befehle zum Verschlüsseln und Entschlüsseln **Schlüssel** - und Anbieterattribute.** **Bei der Verwendung von AWS KMS keys Verschlüsselungsbefehlen ist ein Schlüsselattribut erforderlich.** Für Befehle zum Entschlüsseln ist ein **Schlüsselattribut** oder ein **Erkennungsattribut** mit einem Wert von `true` (aber nicht beiden) erforderlich. [Es hat sich **bewährt, das Schlüsselattribut** beim Entschlüsseln zu verwenden.AWS Encryption SDK](best-practices.md) Dies ist besonders wichtig, wenn Sie Stapel unbekannter Nachrichten entschlüsseln, z. B. Nachrichten in einem Amazon S3 S3-Bucket oder einer Amazon SQS SQS-Warteschlange.  
Ein Beispiel, das zeigt, wie Sie Schlüssel mit AWS KMS mehreren Regionen als Schlüssel zum Umschließen von Schlüsseln verwenden können, finden Sie unter. [Verwenden Sie mehrere Regionen AWS KMS keys](configure.md#config-mrks)  
**Attribute**: Der Wert des `--wrapping-keys`-Parameters besteht aus den folgenden Attributen. Das Format ist `attribute_name=value`.     
**Schlüssel**  
Identifiziert den Umbruchschlüssel, der bei dem Vorgang verwendet wurde. Das Format ist ein **key**= ID-Paar. Sie können mehrere **key**-Attribute in jedem `--wrapping-keys`-Parameterwert angeben.  
+ **Befehle verschlüsseln**: Alle Verschlüsselungsbefehle erfordern das **Schlüsselattribut**. Wenn Sie einen Befehl AWS KMS key in an encrypt verwenden, kann der Wert des **Schlüsselattributs** eine Schlüssel-ID, ein Schlüssel-ARN, ein Aliasname oder ein Alias-ARN sein. *Eine Beschreibung der AWS KMS Schlüsselkennungen finden Sie unter [Schlüsselkennungen im AWS Key Management Service Entwicklerhandbuch](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id).* 
+ **Befehle entschlüsseln**: Beim Entschlüsseln mit AWS KMS keys erfordert der `--wrapping-keys` Parameter ein **Schlüsselattribut mit einem [Schlüssel-ARN-Wert](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN)** oder ein **Discovery-Attribut** mit einem Wert von `true` (aber nicht beide). Die Verwendung des **Schlüsselattributs** ist eine [AWS Encryption SDK bewährte](best-practices.md) Methode. Bei der Entschlüsselung mit einem benutzerdefinierten Hauptschlüsselanbieter ist das **Schlüsselattribut** erforderlich.
**Anmerkung**  
Um einen AWS KMS Wrapping-Schlüssel in einem Decrypt-Befehl anzugeben, muss der Wert des **Schlüsselattributs** ein Schlüssel-ARN sein. Wenn Sie eine Schlüssel-ID, einen Aliasnamen oder einen Alias-ARN verwenden, erkennt die AWS Encryption CLI den Wrapping-Schlüssel nicht.
Sie können mehrere **key**-Attribute in jedem `--wrapping-keys`-Parameterwert angeben. Alle **Anbieter** -, **Regions** - und **Profilattribute** in einem `--wrapping-keys` Parameter gelten jedoch für alle Schlüssel, die in diesem Parameterwert enthalten sind. Verwenden Sie mehrere `--wrapping-keys` Parameter im Befehl, um Wrapping Keys mit unterschiedlichen Attributwerten anzugeben.  
**Entdeckung**  
Ermöglicht der AWS Encryption CLI, beliebige AWS KMS key zum Entschlüsseln der Nachricht zu verwenden. Der **Erkennungswert** kann `true` oder `false` sein. Der Standardwert ist `false`. Das **Discovery-Attribut** ist nur in Entschlüsselungsbefehlen gültig und nur, wenn der Hauptschlüsselanbieter dies AWS KMS tut.   
Bei der Entschlüsselung mit AWS KMS keys erfordert der `--wrapping-keys` Parameter ein **Schlüsselattribut** oder ein **Discovery-Attribut** mit einem Wert von `true` (aber nicht beiden). Wenn Sie das **Schlüsselattribut** verwenden, können Sie ein **Erkennungsattribut** mit dem Wert von verwenden`false`, um die Erkennung explizit abzulehnen.   
+ `False`(Standard) — Wenn das **Discovery-Attribut** nicht angegeben ist oder sein Wert ist`false`, entschlüsselt die AWS Encryption CLI die Nachricht nur unter Verwendung des durch das **Schlüsselattribut** des `--wrapping-keys` Parameters AWS KMS keys angegebenen. Wenn Sie bei der Erkennung kein **Schlüsselattribut** angeben`false`, schlägt der Entschlüsselungsbefehl fehl. Dieser Wert unterstützt eine [bewährte Methode](best-practices.md) für die AWS Verschlüsselungs-CLI.
+ `True`— Wenn der Wert des **Discovery-Attributs** ist`true`, ruft die AWS Encryption CLI die AWS KMS keys From-Metadaten in der verschlüsselten Nachricht ab und verwendet diese, AWS KMS keys um die Nachricht zu entschlüsseln. Das **Discovery-Attribut** mit dem Wert von `true` verhält sich wie Versionen der AWS Encryption CLI vor Version 1.8. *x*, das es Ihnen nicht erlaubte, beim Entschlüsseln einen Wrapping-Schlüssel anzugeben. Ihre Absicht, einen zu verwenden, AWS KMS key ist jedoch ausdrücklich. Wenn Sie bei der Erkennung ein **Schlüsselattribut** angeben`true`, schlägt der Entschlüsselungsbefehl fehl. 

  Der `true` Wert kann dazu führen, dass die AWS Encryption CLI AWS KMS keys in verschiedenen AWS-Konten Regionen verwendet wird oder AWS KMS keys dass versucht wird, eine Verwendung zu verwenden, für die der Benutzer nicht autorisiert ist. 
Wenn **Discovery aktiviert** ist`true`, empfiehlt es sich, die Attribute **discovery-partition und **discovery-account**** zu verwenden, um die Verwendung auf die von Ihnen AWS KMS keys angegebenen Attribute zu beschränken. AWS-Konten   
**Discovery-Konto**  
Beschränkt die für die Entschlüsselung AWS KMS keys verwendeten Werte auf die angegebenen Werte. AWS-Konto Der einzig gültige Wert für dieses Attribut ist eine [AWS-Konto ID.](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html)  
Dieses Attribut ist optional und nur in Entschlüsselungsbefehlen gültig, bei AWS KMS keys denen das **Discovery-Attribut** auf gesetzt `true` und das **Discovery-Partition-Attribut angegeben** ist.  
Jedes **Discovery-Account-Attribut** benötigt nur eine AWS-Konto ID, aber Sie können mehrere **Discovery-Account-Attribute** in demselben Parameter angeben. `--wrapping-keys` Alle in einem bestimmten `--wrapping-keys` Parameter angegebenen Konten müssen sich in der angegebenen Partition befinden. AWS   
**Discovery-Partition**  
Gibt die AWS Partition für die Konten im Attribut **discovery-account** an. Sein Wert muss eine AWS Partition sein, z. B. `aws``aws-cn`, oder. `aws-gov-cloud` Weitere Informationen finden Sie unter [Amazon Resource Names](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax) in der *Allgemeine AWS-Referenz*.  
Dieses Attribut ist erforderlich, wenn Sie das Attribut **discovery-account** verwenden. Sie können in jedem Parameter nur ein **Discovery-Partition-Attribut** angeben. `--wrapping keys` Verwenden Sie AWS-Konten einen zusätzlichen `--wrapping-keys` Parameter, um mehrere Partitionen anzugeben.  
**provider**  
Identifiziert den [Masterschlüssel-Anbieter](concepts.md#master-key-provider). Das Format ist ein **provider**= ID-Paar. Der Standardwert **aws-kms steht** für. AWS KMS Dieses Attribut ist nur erforderlich, wenn der Hauptschlüsselanbieter dies nicht tut. AWS KMS  
**Region**  
Identifiziert den AWS-Region von einem AWS KMS key. Dieses Attribut ist nur gültig für AWS KMS keys. Es wird nur verwendet, wenn die **key**-ID keine Region angibt, andernfalls wird es ignoriert. Wenn es verwendet wird, überschreibt es die Standardregion im AWS CLI namens profile.   
**Profil**  
Identifiziert ein AWS CLI [benanntes Profil](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html). Dieses Attribut ist nur gültig für AWS KMS keys. Die Region im Profil wird nur verwendet, wenn die key-ID keine Region angibt und es kein **region**-Attribut im Befehl gibt. 

**--input (-i)**  
Gibt den Speicherort der zu ver- oder entschlüsselnden Daten an. Dieser Parameter muss angegeben werden. Der Wert kann ein Pfad zu einer Datei oder einem Verzeichnis oder ein Dateinamenmuster sein. Wenn Sie Eingaben an den Befehl weiterleiten (stdin), verwenden Sie `-`.  
Wenn die Eingabe nicht vorhanden ist, wird der Befehl fehlerfrei ohne Fehlermeldung oder Warnung ausgeführt.    
**--recursive (-r, -R)**  
Führt die Operation für Dateien im Eingabeverzeichnis und seinen Unterverzeichnissen aus. Dieser Parameter ist erforderlich, wenn der Wert von `--input` ein Verzeichnis ist.  
**--decode**  
Decodiert Base64-codierte Eingaben.   
Wenn Sie eine Nachricht entschlüsseln, die verschlüsselt und dann codiert wurde, müssen Sie die Nachricht decodieren, bevor Sie sie entschlüsseln. Dieser Parameter erledigt dies für Sie.   
Wenn Sie beispielsweise den `--encode`-Parameter in einem Verschlüsselungsbefehl verwendet haben, verwenden Sie den `--decode`-Parameter in dem entsprechenden Entschlüsselungsbefehl. Sie können diesen Parameter auch verwenden, um mit Base64 codierte Eingaben zu decodieren, bevor Sie sie verschlüsseln.

**--output (-o)**  
Gibt einen Zielspeicherort für die Ausgabe an. Dieser Parameter muss angegeben werden. Der Wert kann ein Dateiname oder ein vorhandenes Verzeichnis sein, oder `-` sein, womit die Ausgabe in die Befehlszeile geschrieben wird (stdout).   
Wenn das angegebene Ausgabeverzeichnis nicht vorhanden ist, schlägt der Befehl fehl. Wenn die Eingabe Unterverzeichnisse enthält, reproduziert die AWS Encryption CLI die Unterverzeichnisse unter dem von Ihnen angegebenen Ausgabeverzeichnis.   
Standardmäßig überschreibt die AWS Encryption CLI Dateien mit demselben Namen. Dieses Verhalten ändern Sie mit den Parametern `--interactive` oder `--no-overwrite`. Um die Überschreibwarnung zu unterdrücken, verwenden Sie den Parameter `--quiet`.  
Wenn ein Befehl, der eine Ausgabedatei überschreiben würde, fehlschlägt, ist die Ausgabedatei bereits gelöscht.  
**--interactive**  
Informiert Sie, bevor die Datei überschrieben wird.  
**--no-overwrite**  
Überschreibt keine Dateien. Wenn die Ausgabedatei existiert, überspringt die AWS Encryption CLI stattdessen die entsprechende Eingabe.  
**--Suffix**  
Gibt ein benutzerdefiniertes Dateinamensuffix für Dateien an, die die AWS Encryption CLI erstellt. Wenn Sie kein Suffix angeben wollen, verwenden Sie den Parameter ohne Wert (`--suffix`).  
Wenn der `--output`-Parameter keinen Dateinamen angibt, hat der Ausgabedateiname standardmäßig den gleichen Namen wie die Eingabedatei, jedoch mit dem Suffix. Das Suffix für Verschlüsselungsbefehle ist `.encrypted`. Das Suffix für Entschlüsselungsbefehle ist `.decrypted`.   
**--encode**  
Wendet die Base64-Codierung (binär in Text) auf die Ausgabe an. Die Kodierung verhindert, dass das Shell-Host-Programm Nicht-ASCII-Zeichen im Ausgabetext falsch interpretiert.  
Verwenden Sie diesen Parameter, wenn Sie eine verschlüsselte Ausgabe nach stdout (`--output -`) schreiben, insbesondere in einer PowerShell Konsole, auch wenn Sie die Ausgabe an einen anderen Befehl weiterleiten oder sie in einer Variablen speichern.

**--metadata-output**  
Gibt einen Speicherort für Metadaten über die kryptografischen Operationen an. Geben Sie einen Pfad und einen Dateinamen ein. Wenn das Verzeichnis nicht vorhanden ist, schlägt der Befehl fehl. Um die Metadaten in die Befehlszeile zu schreiben (stdout), verwenden Sie `-`.   
Sie können die Befehlsausgabe (`--output`) und Metadatenausgaben (`--metadata-output`) nicht im selben Befehl auf stdout schreiben. Auch wenn der Wert von `--input` oder `--output` ein Verzeichnis (ohne Dateinamen) ist, können Sie die Metadatenausgabe nicht in das gleiche Verzeichnis oder in ein Unterverzeichnis dieses Verzeichnisses schreiben.  
Wenn Sie eine vorhandene Datei angeben, hängt die AWS Encryption CLI standardmäßig neue Metadatensätze an jeden Inhalt der Datei an. Mit dieser Funktion können Sie eine einzige Datei erstellen, die die Metadaten für alle Ihre kryptografischen Operationen enthält. Um den Inhalt einer bestehenden Datei zu überschreiben, verwenden Sie den `--overwrite-metadata`-Parameter.  
Die AWS Encryption CLI gibt für jeden Verschlüsselungs- oder Entschlüsselungsvorgang, den der Befehl ausführt, einen JSON-formatierten Metadatensatz zurück. Jeder Metadatensatz enthält die vollständigen Pfade zur Ein- und Ausgabedatei, den Verschlüsselungskontext, das Algorithmen-Paket und andere praktische Informationen, anhand derer Sie die Operation überprüfen und sicherstellen können, ob sie Ihren Sicherheitsstandards entspricht.    
**--overwrite-metadata**  
Überschreibt den Inhalt in der Metadaten-Ausgabedatei. Standardmäßig fügt der `--metadata-output`-Parameter Metadaten an vorhandenen Inhalt der Datei an.

**--suppress-metadata (-S)**  
Unterdrückt die Metadaten über die Verschlüsselungs- oder Entschlüsselungsoperation. 

**--commitment-policy**  <a name="syntax-commitment-policy"></a>
Gibt die [Commitment-Richtlinie für Befehle](concepts.md#commitment-policy) zum Verschlüsseln und Entschlüsseln an. Die Commitment-Richtlinie bestimmt, ob Ihre Nachricht mit der Sicherheitsfunktion [Key Commitment](concepts.md#key-commitment) ver- oder entschlüsselt wird.  
Der `--commitment-policy` Parameter wurde in Version 1.8 eingeführt. *x.* Es ist gültig für Befehle zum Verschlüsseln und Entschlüsseln.  
**In Version 1.8. ***x*, die AWS Encryption CLI verwendet die `forbid-encrypt-allow-decrypt` Commitment-Richtlinie für alle Verschlüsselungs- und Entschlüsselungsvorgänge. Wenn Sie den `--wrapping-keys` Parameter in einem Verschlüsselungs- oder Entschlüsselungsbefehl verwenden, ist ein `--commitment-policy` Parameter mit dem `forbid-encrypt-allow-decrypt` Wert erforderlich. Wenn Sie den `--wrapping-keys` Parameter nicht verwenden, ist der `--commitment-policy` Parameter ungültig. Wenn Sie eine Verpflichtungsrichtlinie festlegen, wird ausdrücklich verhindert, dass sich Ihre Verpflichtungsrichtlinie automatisch ändert, `require-encrypt-require-decrypt` wenn Sie auf Version 2.1 aktualisieren. *x*  
Ab **Version 2.1. ***x*, alle Werte der Verpflichtungspolitik werden unterstützt. Der `--commitment-policy` Parameter ist optional und der Standardwert ist`require-encrypt-require-decrypt`.   
Dieser Parameter hat die folgenden Werte:  
+ `forbid-encrypt-allow-decrypt`— Mit Schlüsselzusage kann nicht verschlüsselt werden. Es kann Chiffretexte entschlüsseln, die mit oder ohne Schlüsselbindung verschlüsselt wurden. 

  In Version 1.8. *x*, das ist der einzig gültige Wert. Die AWS Encryption CLI verwendet die `forbid-encrypt-allow-decrypt` Commitment-Richtlinie für alle Verschlüsselungs- und Entschlüsselungsvorgänge. 
+ `require-encrypt-allow-decrypt`— Verschlüsselt nur mit Schlüsselzusage. Entschlüsselt mit und ohne Schlüsselbindung. Dieser Wert wurde in Version 2.1 eingeführt. *x.*
+ `require-encrypt-require-decrypt`(Standard) — Verschlüsselt und entschlüsselt nur mit Schlüsselzusage. Dieser Wert wurde in Version 2.1 eingeführt. *x.* Dies ist der Standardwert in den Versionen 2.1. *x* und später. Mit diesem Wert entschlüsselt die AWS Encryption CLI keinen Chiffretext, der mit früheren Versionen von verschlüsselt wurde. AWS Encryption SDK
Ausführliche Informationen zur Festlegung Ihrer Verpflichtungsrichtlinie finden Sie unter. [Migrieren Sie Ihre AWS Encryption SDK](migration.md)

**--encryption-context (-c)**  
Gibt einen [Verschlüsselungskontext](crypto-cli-how-to.md#crypto-cli-encryption-context) für die Operation an. Dieser Parameter ist nicht erforderlich, wird jedoch empfohlen.   
+ In einem `--encrypt` -Befehl geben Sie ein oder mehrere `name=value` Paare an. Verwenden Sie Leerzeichen, um die zu trennen.
+ Geben Sie in einem `--decrypt` Befehl `name=value` Paare, `name` Elemente ohne Werte oder beides ein.
Wenn der `name` oder `value` in einem `name=value`-Paar Leerzeichen oder Sonderzeichen enthält, schließen Sie gesamte Paar in Anführungszeichen ein. Beispiel, `--encryption-context "department=software development"`.

**--buffer (-b) [Eingeführt in Version 1.9. *x und 2.2*. *x*]**  
Gibt Klartext erst zurück, nachdem alle Eingaben verarbeitet wurden, einschließlich der Überprüfung der digitalen Signatur, falls eine vorhanden ist.

**-- max-encrypted-data-keys [Eingeführt in Version 1.9. *x* und 2.2. *x*]**  
Gibt die maximale Anzahl verschlüsselter Datenschlüssel in einer verschlüsselten Nachricht an. Dieser Parameter ist optional.   
Gültige Werte sind 1 — 65.535. Wenn Sie diesen Parameter weglassen, erzwingt die AWS Encryption CLI kein Maximum. Eine verschlüsselte Nachricht kann bis zu 65.535 (2^16 — 1) verschlüsselte Datenschlüssel enthalten.  
Sie können diesen Parameter in Verschlüsselungsbefehlen verwenden, um eine falsch formatierte Nachricht zu verhindern. Sie können ihn in Entschlüsselungsbefehlen verwenden, um bösartige Nachrichten zu erkennen und zu verhindern, dass Nachrichten mit zahlreichen verschlüsselten Datenschlüsseln, die Sie nicht entschlüsseln können, entschlüsselt werden. Einzelheiten und ein Beispiel finden Sie unter [Beschränkung verschlüsselter Datenschlüssel](configure.md#config-limit-keys).

**--help (-h)**  
Gibt Verwendung und Syntax in der Befehlszeile aus.

**--version**  
Ruft die Version der AWS Encryption CLI ab.

**-v \$1 -vv \$1 -vvv \$1 -vvvv**  
Zeigt ausführliche Informationen, Warnungen und Debugging-Nachrichten an. Die Details in der Ausgabe nehmen mit der Anzahl der `v` im Parameter zu. Die detaillierteste Einstellung (`-vvvv`) gibt Daten auf Debugging-Ebene von der AWS Encryption CLI und allen von ihr verwendeten Komponenten zurück.

**--quiet (-q)**  
Unterdrückt Warnmeldungen, z. B. die Nachricht, die angezeigt wird, wenn Sie eine Ausgabedatei überschreiben.

**--master-keys (-m) [Veraltet]**  
Der Parameter --master-keys ist in 1.8 veraltet. *x und wurde* in Version 2.1 entfernt. *x.* Verwenden Sie stattdessen den Parameter [--wrapping-keys](#wrapping-keys).
Gibt die in Ver- und Entschlüsselungsoperationen verwendeten [Masterschlüssel](concepts.md#master-key) an. Sie können in einem Befehl mehrere Masterschlüsselparameter verwenden.  
Der `--master-keys`-Parameter muss in Verschlüsselungsbefehle angegeben werden. Er ist in Entschlüsselungsbefehlen nur erforderlich, wenn Sie einen benutzerdefinierten (nicht-AWS KMS) Hauptschlüsselanbieter verwenden.  
**Attribute**: Der Wert des `--master-keys`-Parameters besteht aus den folgenden Attributen. Das Format ist `attribute_name=value`.     
**Schlüssel**  
Identifiziert den [Wrapping-Schlüssel](concepts.md#master-key), der bei dem Vorgang verwendet wurde. Das Format ist ein **key**= ID-Paar. Das **key**Attribut muss in allen Verschlüsselungsbefehlen angegeben werden.   
Wenn Sie einen Befehl AWS KMS key in an encrypt verwenden, kann der Wert des **Schlüsselattributs** eine Schlüssel-ID, ein Schlüssel-ARN, ein Aliasname oder ein Alias-ARN sein. *Einzelheiten zu AWS KMS Schlüsselkennungen finden Sie unter [Schlüsselkennungen im Entwicklerhandbuch](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id).AWS Key Management Service *  
Das **Schlüsselattribut** ist in Entschlüsselungsbefehlen erforderlich, wenn dies beim Hauptschlüsselanbieter nicht der Fall ist. AWS KMS Das **Schlüsselattribut** ist in Befehlen nicht zulässig, die Daten entschlüsseln, die unter einem verschlüsselt wurden. AWS KMS key  
Sie können mehrere **key**-Attribute in jedem `--master-keys`-Parameterwert angeben. Die **provider**-, **region**- und **profile**-Attribute gelten jedoch für alle Masterschlüssel im Parameterwert. Um Masterschlüssel mit unterschiedlichen Attributwerten anzugeben, verwenden Sie mehrere `--master-keys`-Parameter im Befehl.   
**provider**  
Identifiziert den [Masterschlüssel-Anbieter](concepts.md#master-key-provider). Das Format ist ein **provider**= ID-Paar. Der Standardwert **aws-kms** steht für. AWS KMS Dieses Attribut ist nur erforderlich, wenn der Hauptschlüsselanbieter dies nicht tut. AWS KMS  
**Region**  
Identifiziert den AWS-Region von einem AWS KMS key. Dieses Attribut ist nur gültig für AWS KMS keys. Es wird nur verwendet, wenn die **key**-ID keine Region angibt, andernfalls wird es ignoriert. Wenn es verwendet wird, überschreibt es die Standardregion im AWS CLI namens profile.   
**Profil**  
Identifiziert ein AWS CLI [benanntes Profil](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html). Dieses Attribut ist nur gültig für AWS KMS keys. Die Region im Profil wird nur verwendet, wenn die key-ID keine Region angibt und es kein **region**-Attribut im Befehl gibt. 

## Erweiterte Parameter
<a name="cli-advanced-parameters"></a>

**--algorithm**  
Gibt ein alternatives [Algorithmen-Paket](concepts.md#crypto-algorithm) an. Dieser Parameter ist optional und nur in Verschlüsselungsbefehlen gültig.   
Wenn Sie diesen Parameter weglassen, verwendet die AWS Encryption CLI eine der Standard-Algorithmus-Suiten für die in Version 1.8 AWS Encryption SDK eingeführte. *x.* Beide Standardalgorithmen verwenden AES-GCM mit einer [HKDF](https://en.wikipedia.org/wiki/HKDF) -, einer ECDSA-Signatur und einem 256-Bit-Verschlüsselungsschlüssel. Man verwendet Key Commitment, man nicht. Die Wahl der Standard-Algorithmus-Suite wird durch die [Commitment-Richtlinie](concepts.md#commitment-policy) für den Befehl bestimmt.  
Die Standard-Algorithmus-Suiten werden für die meisten Verschlüsselungsvorgänge empfohlen. Eine Liste gültiger Werte finden Sie unter den Werten für den `algorithm`-Parameter in [Read the Docs](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/index.html#execution).

**--frame-length**  
Erstellt die Ausgabe mit angegebenen Frame-Länge. Dieser Parameter ist optional und nur in Verschlüsselungsbefehlen gültig.   
Geben Sie einen Wert in Bytes ein. Gültige Werte sind 0 und 1 — 2^31 - 1. Ein Wert von 0 steht für Daten ohne Frame. Die Standardeinstellung ist 4096 (Byte).   
Verwenden Sie nach Möglichkeit gerahmte Daten. Das AWS Encryption SDK unterstützt Daten ohne Frames nur für die Verwendung in älteren Versionen. Einige Sprachimplementierungen von AWS Encryption SDK können immer noch nicht gerahmten Chiffretext generieren. Alle unterstützten Sprachimplementierungen können gerahmten und ungerahmten Chiffretext entschlüsseln.

**--max-length**  
Gibt die maximale Frame-Größe (oder die maximale Inhaltslänge für Nachrichten ohne Frame) in Bytes an, die aus verschlüsselten Nachrichten gelesen werden. Dieser Parameter ist optional und nur in Entschlüsselungsbefehlen gültig. Es wurde entwickelt, um Sie vor der Entschlüsselung extrem großer bösartiger Verschlüsselungstexte zu schützen.   
Geben Sie einen Wert in Bytes ein. Wenn Sie diesen Parameter weglassen, wird die Framegröße beim AWS Encryption SDK Entschlüsseln nicht begrenzt.

**--caching**  
Aktiviert das [Datenschlüssel-Caching](data-key-caching.md), womit Datenschlüssel wiederverwendet werden können, statt für jede Eingabedatei einen neuen Datenschüssel zu generieren. Dieser Parameter unterstützt ein erweitertes Szenario. Lesen Sie unbedingt die Dokumentation zum [Datenschlüssel-Caching](data-key-caching.md), bevor Sie diese Funktion verwenden.   
Der `--caching`-Parameter hat die folgenden Attribute.    
**capacity (erforderlich)**  
Legt die maximale Anzahl der Einträge im Cache fest.   
Der minimale Wert beträgt 1. Es gibt keinen Höchstwert.  
**max\$1age (erforderlich)**  
Ermitteln Sie, wie lange Cache-Einträge in Sekunden verwendet werden, und zwar ab dem Zeitpunkt, zu dem sie dem Cache hinzugefügt werden.  
Geben Sie einen Wert größer als 0 ein. Es gibt keinen Höchstwert.  
**max\$1messages\$1encrypted (optional)**  
Legt die maximale Anzahl der Nachrichten fest, die ein im Cache befindlicher Eintrag verschlüsseln kann.   
Gültige Werte sind 1 — 2^32. Der Standardwert ist 2^32 (Nachrichten).  
**max\$1bytes\$1encrypted (optional)**  
Legt die maximale Anzahl der Bytes fest, die ein im Cache befindlicher Eintrag verschlüsseln kann.  
Gültige Werte sind 0 und 1 — 2^63 - 1. Der Standardwert ist 2^63 - 1 (Nachrichten). Bei einem Wert von 0 können Sie Datenschlüssel-Caching nur verwenden, wenn Sie leere Nachrichtenzeichenfolgen verschlüsseln.

# Versionen der AWS Encryption CLI
<a name="crypto-cli-versions"></a>

Wir empfehlen, die neueste Version der AWS Encryption CLI zu verwenden.

**Anmerkung**  
Versionen der AWS Encryption CLI vor 4.0.0 befinden sich in der [end-of-supportPhase](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle).  
Sie können problemlos von Version 2.1 aus aktualisieren. *x* und höher auf die neueste Version der AWS Encryption CLI ohne Code- oder Datenänderungen. In Version 2.1 wurden jedoch [neue Sicherheitsfunktionen](about-versions.md#version-2) eingeführt. *x* sind nicht abwärtskompatibel. Um von Version 1.7 zu aktualisieren. *x* oder früher, Sie müssen zuerst auf die neueste Version 1 aktualisieren. *x-Version* der AWS Encryption CLI. Details hierzu finden Sie unter [Migrieren Sie Ihre AWS Encryption SDK](migration.md).  
Neue Sicherheitsfunktionen wurden ursprünglich in den AWS Encryption CLI Versionen 1.7 veröffentlicht. *x* und 2.0. *x.* Allerdings AWS Encryption CLI Version 1.8. *x* ersetzt Version 1.7. *x* und AWS Encryption CLI 2.1. *x* ersetzt 2.0. *x.* Einzelheiten finden Sie in der entsprechenden [Sicherheitsempfehlung](https://github.com/aws/aws-encryption-sdk-cli/security/advisories/GHSA-2xwp-m7mq-7q3r) im [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)Repository unter GitHub.

Hinweise zu wichtigen Versionen von finden Sie unter[Versionen von AWS Encryption SDK](about-versions.md). AWS Encryption SDK

**Welche Version verwende ich?**

Wenn Sie mit der AWS Encryption CLI noch nicht vertraut sind, verwenden Sie die neueste Version.

Um Daten zu entschlüsseln, die mit einer Version AWS Encryption SDK vor Version 1.7 verschlüsselt wurden. *x*, migrieren Sie zuerst auf die neueste Version der AWS Encryption CLI. Nehmen Sie [alle empfohlenen Änderungen](migration-guide.md) vor, bevor Sie auf Version 2.1 aktualisieren. *x* oder später. Details hierzu finden Sie unter [Migrieren Sie Ihre AWS Encryption SDK](migration.md).

**Weitere Informationen**
+ Ausführliche Informationen zu den Änderungen und Anleitungen für die Migration zu diesen neuen Versionen finden Sie unter[Migrieren Sie Ihre AWS Encryption SDK](migration.md).
+ Eine Beschreibung der neuen AWS Encryption CLI-Parameter und -Attribute finden Sie unter[AWS Encryption SDK CLI Syntax und Parameterreferenz](crypto-cli-reference.md).

In den folgenden Listen werden die Änderungen an der AWS Encryption CLI in Version 1.8 beschrieben. *x* und 2.1. *x.*

## Ausführung 1.8. *x* Änderungen an der AWS Encryption CLI
<a name="cli-changes-1.7"></a>
+ Verwirft den Parameter. `--master-keys` Verwenden Sie stattdessen den `--wrapping-keys`-Parameter.
+ Fügt den Parameter `--wrapping-keys` () `-w` hinzu. Er unterstützt alle Attribute des `--master-keys` Parameters. Außerdem werden die folgenden optionalen Attribute hinzugefügt, die nur beim Entschlüsseln mit AWS KMS keys gültig sind.
  + **Entdeckung**
  + **Discovery-Partition**
  + **Discovery-Konto**

  Für benutzerdefinierte Hauptschlüsselanbieter benötigen `-decrypt` Befehle `--encrypt` und - entweder einen `--wrapping-keys` Parameter oder einen `--master-keys` Parameter (aber nicht beide). Außerdem AWS KMS keys erfordert ein `--encrypt` Befehl mit entweder einen `--wrapping-keys` Parameter oder einen `--master-keys` Parameter (aber nicht beides). 

  In einem `--decrypt` Befehl mit AWS KMS keys ist der `--wrapping-keys` Parameter optional, wird aber empfohlen, da er in Version 2.1 erforderlich ist. *x.* **Wenn Sie es verwenden, müssen Sie entweder das identifizierende Attribut oder das **Discovery-Attribut** mit einem Wert von `true` (aber nicht beide) angeben.**
+ Fügt den `--commitment-policy` Parameter hinzu. Der einzige gültige Wert ist `forbid-encrypt-allow-decrypt`. Die `forbid-encrypt-allow-decrypt` Commitment-Richtlinie wird in allen Befehlen zum Verschlüsseln und Entschlüsseln verwendet.

  In Version 1.8. *x*, wenn Sie den `--wrapping-keys` Parameter verwenden, ist ein `--commitment-policy` Parameter mit dem `forbid-encrypt-allow-decrypt` Wert erforderlich. Wenn Sie den Wert explizit festlegen, wird verhindert, dass Ihre [Verpflichtungsrichtlinie](concepts.md#commitment-policy) automatisch geändert wird, `require-encrypt-require-decrypt` wenn Sie auf Version 2.1 aktualisieren. *x.*

## Ausführung 2.1. *x* Änderungen an der AWS Encryption CLI
<a name="cli-changes-2.x"></a>
+ Entfernt den `--master-keys` Parameter. Verwenden Sie stattdessen den `--wrapping-keys`-Parameter.
+ Der `--wrapping-keys` Parameter ist in allen Befehlen zum Verschlüsseln und Entschlüsseln erforderlich. Sie müssen entweder ein **Schlüsselattribut** oder ein **Erkennungsattribut** mit dem Wert `true` (aber nicht beide) angeben.
+ Der `--commitment-policy` Parameter unterstützt die folgenden Werte. Details hierzu finden Sie unter [Festlegung Ihrer Verpflichtungspolitik](migrate-commitment-policy.md).
  + `forbid-encrypt-allow-decrypt`
  + `require-encrypt-allow-decrypt`
  + `require-encrypt-require decrypt` (Standard)
+ Der `--commitment-policy` Parameter ist in Version 2.1 optional. *x.* Der Standardwert ist `require-encrypt-require-decrypt`.

## Ausführung 1.9. *x* und 2.2. *x* Änderungen an der AWS Encryption CLI
<a name="cli-changes-2.2"></a>
+ Fügt den `--decrypt-unsigned` Parameter hinzu. Details hierzu finden Sie unter [Version 2.2. *x*](about-versions.md#version2.2.x).
+ Fügt den `--buffer` Parameter hinzu. Details hierzu finden Sie unter [Version 2.2. *x*](about-versions.md#version2.2.x).
+ Fügt den `--max-encrypted-data-keys` Parameter hinzu. Details hierzu finden Sie unter [Beschränkung verschlüsselter Datenschlüssel](configure.md#config-limit-keys).

## Version 3.0. *x* Änderungen an der AWS Encryption CLI
<a name="cli-changes-v3"></a>
+ Fügt Unterstützung für Schlüssel AWS KMS mit mehreren Regionen hinzu. Details hierzu finden Sie unter [Verwenden Sie mehrere Regionen AWS KMS keys](configure.md#config-mrks).