

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