

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

# AWS Encryption SDK für .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");
}
```