

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# .NET contoh
<a name="ddb-net-examples"></a>

Contoh berikut menunjukkan cara menggunakan pustaka enkripsi sisi klien .NET untuk DynamoDB untuk melindungi item tabel dalam aplikasi Anda. Untuk menemukan lebih banyak contoh (dan berkontribusi sendiri), lihat [contoh.NET di repositori](https://github.com/aws/aws-database-encryption-sdk-dynamodb//tree/main/Examples/runtimes/net/src) aws-database-encryption-sdk -dynamodb di. GitHub

Contoh berikut menunjukkan cara mengonfigurasi pustaka enkripsi sisi klien .NET untuk DynamoDB dalam tabel Amazon DynamoDB baru yang tidak terisi. Jika Anda ingin mengonfigurasi tabel Amazon DynamoDB yang ada untuk enkripsi sisi klien, lihat. [Tambahkan versi 3.x ke tabel yang ada](ddb-net-config-existing-table.md)

**Topics**
+ [Menggunakan SDK Enkripsi AWS Database tingkat rendah untuk DynamoDB API](#ddb-net-lowlevel-API-example)
+ [Menggunakan level yang lebih rendah `DynamoDbItemEncryptor`](#ddb-net-itemencryptor)

## Menggunakan SDK Enkripsi AWS Database tingkat rendah untuk DynamoDB API
<a name="ddb-net-lowlevel-API-example"></a>

Contoh berikut menunjukkan cara menggunakan SDK Enkripsi AWS Database tingkat rendah untuk DynamoDB API dengan [AWS KMS keyring](use-kms-keyring.md) untuk secara otomatis mengenkripsi dan menandatangani item sisi klien dengan permintaan DynamoDB Anda. `PutItem`

Anda dapat menggunakan [keyring](keyrings.md) apa pun yang didukung, tetapi kami sarankan menggunakan salah satu AWS KMS gantungan kunci jika memungkinkan.

**Lihat contoh kode lengkapnya**: [BasicPutGetExample.cs](https://github.com/aws/aws-database-encryption-sdk-dynamodb/tree/main/Examples/runtimes/net/src/BasicPutGetExample.cs)

**Langkah 1: Buat AWS KMS keyring**  
Contoh berikut digunakan `CreateAwsKmsMrkMultiKeyring` untuk membuat AWS KMS keyring dengan kunci KMS enkripsi simetris. `CreateAwsKmsMrkMultiKeyring`Metode ini memastikan bahwa keyring akan menangani tombol Single-region dan Multi-region dengan benar.  

```
var matProv = new MaterialProviders(new MaterialProvidersConfig());
var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId };
var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
```

**Langkah 2: Konfigurasikan tindakan atribut Anda**  
Contoh berikut mendefinisikan `attributeActionsOnEncrypt` Kamus yang mewakili [tindakan atribut](concepts.md#crypt-actions) sampel untuk item tabel.  
Contoh berikut tidak mendefinisikan atribut apa pun sebagai`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`. Jika Anda menentukan `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` atribut apa pun, maka atribut partisi dan sortir juga harus`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

```
var attributeActionsOnEncrypt = new Dictionary<string, CryptoAction>
{
    ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY
    ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY
    ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN,
    ["attribute2"] = CryptoAction.SIGN_ONLY,
    [":attribute3"] = CryptoAction.DO_NOTHING
};
```

**Langkah 3: Tentukan atribut mana yang dikecualikan dari tanda tangan**  
Contoh berikut mengasumsikan bahwa semua `DO_NOTHING` atribut berbagi awalan yang berbeda "`:`“, dan menggunakan awalan untuk menentukan atribut unsigned yang diizinkan. Klien mengasumsikan bahwa nama atribut apa pun dengan awalan "`:`" dikecualikan dari tanda tangan. Untuk informasi selengkapnya, lihat [Allowed unsigned attributes](ddb-net-using.md#net-allowed-unauth).  

```
const String unsignAttrPrefix = ":";
```

**Langkah 4: Tentukan konfigurasi enkripsi tabel DynamoDB**  
Contoh berikut mendefinisikan `tableConfigs` Peta yang mewakili konfigurasi enkripsi untuk tabel DynamoDB ini.  
[Contoh ini menentukan nama tabel DynamoDB sebagai nama tabel logis.](ddb-net-using.md#net-logical-table-name) Kami sangat menyarankan untuk menentukan nama tabel DynamoDB Anda sebagai nama tabel logis saat Anda pertama kali menentukan konfigurasi enkripsi Anda. Untuk informasi selengkapnya, lihat [Konfigurasi enkripsi dalam SDK Enkripsi AWS Database untuk DynamoDB](ddb-net-using.md#ddb-net-config-encrypt).  
Untuk menggunakan [enkripsi yang dapat dicari](searchable-encryption.md) atau [suar yang ditandatangani](configure.md#signed-beacons), Anda juga harus menyertakan [`SearchConfig`](ddb-java-using.md#ddb-search-config)dalam konfigurasi enkripsi Anda.

```
Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs =
    new Dictionary<String, DynamoDbTableEncryptionConfig>();
DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix
};
tableConfigs.Add(ddbTableName, config);
```

**Langkah 5: Buat klien AWS SDK DynamoDB baru**  
**Contoh berikut membuat klien AWS SDK DynamoDB baru menggunakan `TableEncryptionConfigs` dari Langkah 4.**  

```
var ddb = new Client.DynamoDbClient(
    new DynamoDbTablesEncryptionConfig { TableEncryptionConfigs = tableConfigs });
```

**Langkah 6: Enkripsi dan tandatangani item tabel DynamoDB**  
Contoh berikut mendefinisikan `item` Kamus yang mewakili item tabel sampel dan menempatkan item dalam tabel DynamoDB. Item dienkripsi dan ditandatangani sisi klien sebelum dikirim ke DynamoDB.  

```
var item = new Dictionary<String, AttributeValue>
{
    ["partition_key"] = new AttributeValue("BasicPutGetExample"),
    ["sort_key"] = new AttributeValue { N = "0" },
    ["attribute1"] = new AttributeValue("encrypt and sign me!"),
    ["attribute2"] = new AttributeValue("sign me!"),
    [":attribute3"] = new AttributeValue("ignore me!")
};

PutItemRequest putRequest = new PutItemRequest
{
    TableName = ddbTableName,
    Item = item
};

PutItemResponse putResponse = await ddb.PutItemAsync(putRequest);
```

## Menggunakan level yang lebih rendah `DynamoDbItemEncryptor`
<a name="ddb-net-itemencryptor"></a>

Contoh berikut menunjukkan cara menggunakan level yang lebih rendah `DynamoDbItemEncryptor` dengan [AWS KMS keyring](use-kms-keyring.md) untuk langsung mengenkripsi dan menandatangani item tabel. `DynamoDbItemEncryptor`Itu tidak menempatkan item di tabel DynamoDB Anda.

Anda dapat menggunakan [keyring](keyrings.md) apa pun yang didukung dengan DynamoDB Enhanced Client, tetapi sebaiknya gunakan salah AWS KMS satu gantungan kunci bila memungkinkan.

**catatan**  
Tingkat yang lebih rendah `DynamoDbItemEncryptor` tidak mendukung enkripsi yang dapat [dicari](searchable-encryption.md). Gunakan SDK Enkripsi AWS Database tingkat rendah untuk DynamoDB API untuk menggunakan enkripsi yang dapat dicari.

**Lihat contoh kode lengkapnya**: [ItemEncryptDecryptExample.cs](https://github.com/aws/aws-database-encryption-sdk-dynamodb/tree/main/Examples/runtimes/net/src/itemencryptor/ItemEncryptDecryptExample.cs)

**Langkah 1: Buat AWS KMS keyring**  
Contoh berikut digunakan `CreateAwsKmsMrkMultiKeyring` untuk membuat AWS KMS keyring dengan kunci KMS enkripsi simetris. `CreateAwsKmsMrkMultiKeyring`Metode ini memastikan bahwa keyring akan menangani tombol Single-region dan Multi-region dengan benar.  

```
var matProv = new MaterialProviders(new MaterialProvidersConfig());
var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId };
var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
```

**Langkah 2: Konfigurasikan tindakan atribut Anda**  
Contoh berikut mendefinisikan `attributeActionsOnEncrypt` Kamus yang mewakili [tindakan atribut](concepts.md#crypt-actions) sampel untuk item tabel.  
Contoh berikut tidak mendefinisikan atribut apa pun sebagai`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`. Jika Anda menentukan `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` atribut apa pun, maka atribut partisi dan sortir juga harus`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

```
var attributeActionsOnEncrypt = new Dictionary<String, CryptoAction>
{
    ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY
    ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY
    ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN,
    ["attribute2"] = CryptoAction.SIGN_ONLY,
    [":attribute3"] = CryptoAction.DO_NOTHING
};
```

**Langkah 3: Tentukan atribut mana yang dikecualikan dari tanda tangan**  
Contoh berikut mengasumsikan bahwa semua `DO_NOTHING` atribut berbagi awalan yang berbeda "`:`“, dan menggunakan awalan untuk menentukan atribut unsigned yang diizinkan. Klien mengasumsikan bahwa nama atribut apa pun dengan awalan "`:`" dikecualikan dari tanda tangan. Untuk informasi selengkapnya, lihat [Allowed unsigned attributes](ddb-net-using.md#net-allowed-unauth).  

```
String unsignAttrPrefix = ":";
```

**Langkah 4: Tentukan `DynamoDbItemEncryptor` konfigurasi**  
Contoh berikut mendefinisikan konfigurasi untuk. `DynamoDbItemEncryptor`  
[Contoh ini menentukan nama tabel DynamoDB sebagai nama tabel logis.](ddb-net-using.md#net-logical-table-name) Kami sangat menyarankan untuk menentukan nama tabel DynamoDB Anda sebagai nama tabel logis saat Anda pertama kali menentukan konfigurasi enkripsi Anda. Untuk informasi selengkapnya, lihat [Konfigurasi enkripsi dalam SDK Enkripsi AWS Database untuk DynamoDB](ddb-net-using.md#ddb-net-config-encrypt).  

```
var config = new DynamoDbItemEncryptorConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix
};
```

**Langkah 5: Buat `DynamoDbItemEncryptor`**  
Contoh berikut membuat baru `DynamoDbItemEncryptor` menggunakan `config` dari **Langkah 4**.  

```
var itemEncryptor = new DynamoDbItemEncryptor(config);
```

**Langkah 6: Langsung mengenkripsi dan menandatangani item tabel**  
Contoh berikut langsung mengenkripsi dan menandatangani item menggunakan. `DynamoDbItemEncryptor` `DynamoDbItemEncryptor`Itu tidak menempatkan item di tabel DynamoDB Anda.  

```
var originalItem = new Dictionary<String, AttributeValue>
{
    ["partition_key"] = new AttributeValue("ItemEncryptDecryptExample"),
    ["sort_key"] = new AttributeValue { N = "0" },
    ["attribute1"] = new AttributeValue("encrypt and sign me!"),
    ["attribute2"] = new AttributeValue("sign me!"),
    [":attribute3"] = new AttributeValue("ignore me!")
};

var encryptedItem = itemEncryptor.EncryptItem(
    new EncryptItemInput { PlaintextItem = originalItem }
).EncryptedItem;
```