

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

# AWS Encryption SDK for JavaScript
<a name="javascript"></a>

 AWS Encryption SDK for JavaScript Ini dirancang untuk menyediakan pustaka enkripsi sisi klien untuk pengembang yang menulis aplikasi browser web di JavaScript atau aplikasi server web di Node.js.

Seperti semua implementasi AWS Encryption SDK, AWS Encryption SDK for JavaScript menawarkan fitur perlindungan data tingkat lanjut. Ini termasuk [enkripsi amplop](concepts.md#envelope-encryption), data otentikasi tambahan (AAD), dan [rangkaian algoritma](concepts.md#crypto-algorithm) kunci simetris yang aman, diautentikasi, seperti AES-GCM 256-bit dengan derivasi dan penandatanganan kunci.

Semua implementasi khusus bahasa dirancang agar dapat dioperasikan, tunduk pada kendala bahasa. AWS Encryption SDK Untuk detail tentang batasan bahasa, lihat. JavaScript [Kompatibilitas AWS Encryption SDK for JavaScript](javascript-compatibility.md)

**Pelajari Lebih Lanjut**
+ Untuk detail tentang pemrograman dengan AWS Encryption SDK for JavaScript, lihat [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)repositori di. GitHub
+ Untuk contoh pemrograman, lihat [AWS Encryption SDK for JavaScript contoh](js-examples.md) dan modul [example-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-browser) dan [example-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-node) di repositori. [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/) 
+  Untuk contoh dunia nyata menggunakan data AWS Encryption SDK for JavaScript untuk mengenkripsi dalam aplikasi web, lihat [Cara mengaktifkan enkripsi di browser dengan AWS Encryption SDK for JavaScript dan Node.js](https://aws.amazon.com/blogs/security/how-to-enable-encryption-browser-aws-encryption-sdk-javascript-node-js/) di Blog AWS Keamanan.

**Topics**
+ [Kompatibilitas](javascript-compatibility.md)
+ [Penginstalan](javascript-installation.md)
+ [Modul](javascript-modules.md)
+ [Contoh](js-examples.md)

# Kompatibilitas AWS Encryption SDK for JavaScript
<a name="javascript-compatibility"></a>

 AWS Encryption SDK for JavaScript Ini dirancang untuk dapat dioperasikan dengan implementasi bahasa lain dari. AWS Encryption SDK Dalam kebanyakan kasus, Anda dapat mengenkripsi data dengan AWS Encryption SDK for JavaScript dan mendekripsi dengan implementasi bahasa lain, termasuk Antarmuka Baris [AWS Encryption SDK Perintah](crypto-cli.md). Dan Anda dapat menggunakan AWS Encryption SDK for JavaScript untuk mendekripsi [pesan terenkripsi yang](concepts.md#message) dihasilkan oleh implementasi bahasa lain dari. AWS Encryption SDK

Namun, ketika Anda menggunakan AWS Encryption SDK for JavaScript, Anda perlu menyadari beberapa masalah kompatibilitas dalam implementasi JavaScript bahasa dan di browser web.

Selain itu, saat menggunakan implementasi bahasa yang berbeda, pastikan untuk mengonfigurasi penyedia kunci master, kunci master, dan gantungan kunci yang kompatibel. Lihat perinciannya di [Kompatibilitas keyring](choose-keyring.md#keyring-compatibility).

## AWS Encryption SDK for JavaScript kompatibilitas
<a name="javascript-language-compatibility"></a>

 JavaScript Implementasi AWS Encryption SDK berbeda dari implementasi bahasa lain dengan cara berikut:
+ Operasi enkripsi AWS Encryption SDK for JavaScript tidak mengembalikan ciphertext nonframed. Namun, AWS Encryption SDK for JavaScript wasiat mendekripsi ciphertext berbingkai dan tidak dibingkai yang dikembalikan oleh implementasi bahasa lain dari. AWS Encryption SDK
+ Mulai dari Node.js versi 12.9.0, Node.js mendukung opsi pembungkus kunci RSA berikut:
  + OAEP dengan SHA1,, SHA256, SHA384 atau SHA512
  + OAEP dengan dan dengan SHA1 MGF1 SHA1
  + PKCS1v15
+ Sebelum versi 12.9.0, Node.js hanya mendukung opsi pembungkus kunci RSA berikut:
  + OAEP dengan dan dengan SHA1 MGF1 SHA1
  + PKCS1v15

## Kompabilitas peramban
<a name="javascript-browser-compatibility"></a>

Beberapa browser web tidak mendukung operasi kriptografi dasar yang AWS Encryption SDK for JavaScript diperlukan. Anda dapat mengkompensasi beberapa operasi yang hilang dengan mengonfigurasi fallback untuk WebCrypto API yang diterapkan browser.

**Keterbatasan browser web**

Keterbatasan berikut umum untuk semua browser web:
+  WebCrypto API tidak mendukung pembungkus PKCS1v15 kunci.
+ Browser tidak mendukung kunci 192-bit.

**Operasi kriptografi yang diperlukan**

Ini AWS Encryption SDK for JavaScript membutuhkan operasi berikut di browser web. Jika browser tidak mendukung operasi ini, itu tidak kompatibel dengan. AWS Encryption SDK for JavaScript
+ Browser harus menyertakan`crypto.getRandomValues()`, yang merupakan metode untuk menghasilkan nilai acak kriptografis. Untuk informasi tentang versi browser web yang mendukung`crypto.getRandomValues()`, lihat [Dapatkah Saya Menggunakan kripto. getRandomValues()?](https://caniuse.com/#feat=getrandomvalues) .

**Fallback yang dibutuhkan**

Ini AWS Encryption SDK for JavaScript membutuhkan perpustakaan dan operasi berikut di browser web. Jika Anda mendukung browser web yang tidak memenuhi persyaratan ini, Anda harus mengonfigurasi fallback. Jika tidak, upaya untuk AWS Encryption SDK for JavaScript menggunakan browser akan gagal.
+  WebCrypto API, yang melakukan operasi kriptografi dasar dalam aplikasi web, tidak tersedia untuk semua browser. Untuk informasi tentang versi browser web yang mendukung kriptografi web, lihat [Dapatkah Saya Menggunakan Kriptografi Web?](https://caniuse.com/#feat=cryptography) .
+ Versi modern dari browser web Safari tidak mendukung enkripsi AES-GCM nol byte, yang diperlukan. AWS Encryption SDK Jika browser mengimplementasikan WebCrypto API, tetapi tidak dapat menggunakan AES-GCM untuk mengenkripsi nol byte, browser AWS Encryption SDK for JavaScript menggunakan pustaka fallback hanya untuk enkripsi nol-byte. Ini menggunakan WebCrypto API untuk semua operasi lainnya.

Untuk mengonfigurasi fallback untuk salah satu batasan, tambahkan pernyataan berikut ke kode Anda. Dalam fungsi [ConfigurefallBack](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/web-crypto-backend/src/backend-factory.ts#L78), tentukan pustaka yang mendukung fitur yang hilang. Contoh berikut menggunakan Microsoft Research JavaScript Cryptography Library (`msrcrypto`), tetapi Anda dapat menggantinya dengan perpustakaan yang kompatibel. Untuk contoh lengkapnya, lihat [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)
```

# Memasang AWS Encryption SDK for JavaScript
<a name="javascript-installation"></a>

 AWS Encryption SDK for JavaScript Terdiri dari kumpulan modul yang saling bergantung. Beberapa modul hanyalah kumpulan modul yang dirancang untuk bekerja sama. Beberapa modul dirancang untuk bekerja secara mandiri. Beberapa modul diperlukan untuk semua implementasi; beberapa lainnya hanya diperlukan untuk kasus khusus. Untuk informasi tentang modul di AWS Encryption SDK for JavaScript, lihat [Modul di AWS Encryption SDK for JavaScript](javascript-modules.md) dan `README.md` file di masing-masing modul di [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules)repositori pada. GitHub

**catatan**  
[Semua versi yang AWS Encryption SDK for JavaScript lebih awal dari 2.0.0 sedang dalam fase. end-of-support](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)  
Anda dapat memperbarui dengan aman dari versi 2.0. *x* dan yang lebih baru ke versi terbaru AWS Encryption SDK for JavaScript tanpa kode atau perubahan data. Namun, [fitur keamanan baru](about-versions.md#version-2) diperkenalkan di versi 2.0. *x* tidak kompatibel ke belakang. Untuk memperbarui dari versi lebih awal dari 1.7. *x* ke versi 2.0. *x* dan yang lebih baru, Anda harus terlebih dahulu memperbarui ke yang terbaru 1. *x* versi AWS Encryption SDK for JavaScript. Lihat perinciannya di [Migrasi Anda AWS Encryption SDK](migration.md).

Untuk menginstal modul, gunakan [manajer paket npm](https://www.npmjs.com/get-npm). 

Misalnya, untuk menginstal `client-node` modul, yang mencakup semua modul yang Anda butuhkan untuk memprogram dengan AWS Encryption SDK for JavaScript di Node.js, gunakan perintah berikut. 

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

Untuk menginstal `client-browser` modul, yang mencakup semua modul yang perlu Anda program dengan AWS Encryption SDK for JavaScript di browser, gunakan perintah berikut. 

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

Untuk contoh kerja tentang cara menggunakan AWS Encryption SDK for JavaScript, lihat contoh di `example-node` dan `example-browser` modul di [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)repositori pada. GitHub

# Modul di AWS Encryption SDK for JavaScript
<a name="javascript-modules"></a>

Modul di AWS Encryption SDK for JavaScript membuatnya mudah untuk menginstal kode yang Anda butuhkan untuk proyek Anda.

## Modul untuk JavaScript Node.js
<a name="jsn-modules-node"></a>

[simpul klien](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/client-node)  
Termasuk semua modul yang Anda butuhkan untuk memprogram dengan AWS Encryption SDK for JavaScript di Node.js.

[caching-materials-manager-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/caching-materials-manager-node)  
Mengekspor fungsi yang mendukung fitur [caching kunci data](data-key-caching.md) AWS Encryption SDK for JavaScript di Node.js. 

[dekripsi-simpul](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/decrypt-node)  
Mengekspor fungsi yang mendekripsi dan memverifikasi pesan terenkripsi yang mewakili aliran data dan data. Termasuk dalam `client-node` modul.

[enkripsi-simpul](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/encrypt-node)  
Mengekspor fungsi yang mengenkripsi dan menandatangani berbagai jenis data. Termasuk dalam `client-node` modul.

[contoh-simpul](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-node)  
Mengekspor contoh kerja pemrograman dengan AWS Encryption SDK for JavaScript di Node.js. Termasuk contoh berbagai jenis gantungan kunci dan berbagai jenis data.

[hkdf-simpul](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/hkdf-node)  
Mengekspor [Fungsi Derivasi Kunci (HKDF) berbasis HMAC](https://en.wikipedia.org/wiki/HKDF) yang digunakan di Node.js AWS Encryption SDK for JavaScript dalam rangkaian algoritma tertentu. AWS Encryption SDK for JavaScript Di browser menggunakan fungsi HKDF asli di API. WebCrypto 

[integrasi-simpul](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/integration-node)  
Mendefinisikan pengujian yang memverifikasi bahwa AWS Encryption SDK for JavaScript di Node.js kompatibel dengan implementasi bahasa lain dari file. AWS Encryption SDK

[kms-keyring-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/kms-keyring-node)  
Mengekspor fungsi yang mendukung AWS KMS keyrings di Node.js.

[raw-aes-keyring-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-aes-keyring-node)  
Mengekspor fungsi yang mendukung [keyrings Raw AES di Node.js](use-raw-aes-keyring.md).

[raw-rsa-keyring-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-rsa-keyring-node)  
Mengekspor fungsi yang mendukung [keyring Raw RSA di Node.js](use-raw-rsa-keyring.md).

## Modul untuk JavaScript Browser
<a name="jsn-modules-browser"></a>

[peramban klien](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/client-browser)  
Termasuk semua modul yang Anda butuhkan untuk memprogram dengan AWS Encryption SDK for JavaScript di browser.

[caching-materials-manager-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/caching-materials-manager-browser)  
Mengekspor fungsi yang mendukung fitur [caching kunci data](data-key-caching.md) untuk JavaScript di browser.

[dekripsi-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/decrypt-browser)  
Mengekspor fungsi yang mendekripsi dan memverifikasi pesan terenkripsi yang mewakili aliran data dan data.

[browser terenkripsi](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/encrypt-browser)  
Mengekspor fungsi yang mengenkripsi dan menandatangani berbagai jenis data. 

[contoh-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-browser)  
Contoh kerja pemrograman dengan AWS Encryption SDK for JavaScript di browser. Termasuk contoh berbagai jenis gantungan kunci dan berbagai jenis data.

[integrasi-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/integration-browser)  
Mendefinisikan tes yang memverifikasi bahwa AWS Encryption SDK for Java Script di browser kompatibel dengan implementasi bahasa lain dari file. AWS Encryption SDK

[kms-keyring-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/kms-keyring-browser)  
Mengekspor fungsi yang mendukung [AWS KMS keyrings](use-kms-keyring.md) di browser.

[raw-aes-keyring-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-aes-keyring-browser)  
Mengekspor fungsi yang mendukung [keyrings Raw AES di browser](use-raw-aes-keyring.md).

[raw-rsa-keyring-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-rsa-keyring-browser)  
Mengekspor fungsi yang mendukung [keyring Raw RSA di browser](use-raw-rsa-keyring.md).

## Modul untuk semua implementasi
<a name="jsn-modules-all"></a>

[bahan tembolok](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/cache-material)  
Mendukung fitur [caching kunci data](data-key-caching.md). Menyediakan kode untuk merakit materi kriptografi yang di-cache dengan setiap kunci data.

[kms-keyring](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/kms-keyring)  
Mengekspor fungsi yang mendukung keyrings [KMS.](use-kms-keyring.md)

[manajemen material](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/material-management)  
Menerapkan [manajer bahan kriptografi](concepts.md#crypt-materials-manager) (CMM).

[gantungan kunci mentah](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-keyring)  
Fungsi ekspor diperlukan untuk gantungan kunci AES dan RSA mentah.

[serialisasi](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/serialize)  
Mengekspor fungsi yang digunakan SDK untuk membuat serial outputnya.

[web-crypto-backend](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/web-crypto-backend)  
Mengekspor fungsi yang menggunakan WebCrypto API AWS Encryption SDK for JavaScript di browser.

# AWS Encryption SDK for JavaScript contoh
<a name="js-examples"></a>

Contoh berikut menunjukkan cara menggunakan untuk mengenkripsi dan AWS Encryption SDK for JavaScript mendekripsi data. 

Anda dapat menemukan lebih banyak contoh penggunaan modul [example-node dan [example-browser AWS Encryption SDK for JavaScript](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) di repositori pada. [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/) GitHub Modul contoh ini tidak diinstal ketika Anda menginstal `client-browser` atau `client-node` modul.

**Lihat contoh kode lengkap**[: Node: kms\$1simple.ts, [Browser: kms\$1simple.ts](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/example-node/src/kms_simple.ts)](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/example-browser/src/kms_simple.ts)

**Topics**
+ [

## Mengenkripsi data dengan keyring AWS KMS
](#javascript-example-encrypt)
+ [

## Mendekripsi data dengan keyring AWS KMS
](#javascript-example-decrypt)

## Mengenkripsi data dengan keyring AWS KMS
<a name="javascript-example-encrypt"></a>

Contoh berikut menunjukkan kepada Anda bagaimana menggunakan AWS Encryption SDK for JavaScript untuk mengenkripsi dan mendekripsi string pendek atau array byte. 

Contoh ini menampilkan [AWS KMS keyring](use-kms-keyring.md), jenis keyring yang menggunakan AWS KMS key untuk menghasilkan dan mengenkripsi kunci data. Untuk bantuan membuat AWS KMS key, lihat [Membuat Kunci](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) di *Panduan AWS Key Management Service Pengembang*. Untuk bantuan mengidentifikasi AWS KMS keys dalam AWS KMS gantungan kunci, lihat [Mengidentifikasi AWS KMS keys dalam AWS KMS keyring](use-kms-keyring.md#kms-keyring-id)

Langkah 1: Tetapkan kebijakan komitmen.  
Dimulai pada versi 1.7. *x* dari AWS Encryption SDK for JavaScript, Anda dapat mengatur kebijakan komitmen ketika Anda memanggil `buildClient` fungsi baru yang membuat instance AWS Encryption SDK klien. `buildClient`Fungsi ini mengambil nilai yang disebutkan yang mewakili kebijakan komitmen Anda. Ini mengembalikan `decrypt` fungsi yang diperbarui `encrypt` dan memberlakukan kebijakan komitmen Anda saat Anda mengenkripsi dan mendekripsi.  
Contoh berikut menggunakan `buildClient` fungsi untuk menentukan [kebijakan komitmen default](migrate-commitment-policy.md),`REQUIRE_ENCRYPT_REQUIRE_DECRYPT`. Anda juga dapat menggunakan `buildClient` untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat [Membatasi kunci data terenkripsi](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
)
```

Langkah 2: Bangun keyring.  
Buat AWS KMS keyring untuk enkripsi.   
Saat mengenkripsi dengan AWS KMS keyring, Anda harus menentukan *kunci generator, yaitu kunci* yang digunakan untuk menghasilkan kunci data plaintext dan mengenkripsinya. AWS KMS key Anda juga dapat menentukan nol atau lebih *kunci tambahan* yang mengenkripsi kunci data teks biasa yang sama. Keyring mengembalikan kunci data plaintext dan satu salinan terenkripsi dari kunci data tersebut untuk masing-masing AWS KMS key di keyring, termasuk kunci generator. Untuk mendekripsi data, Anda perlu mendekripsi salah satu kunci data terenkripsi.  
Untuk menentukan keyring enkripsi di dalam AWS Encryption SDK for JavaScript, Anda dapat menggunakan [pengenal AWS KMS kunci yang didukung](use-kms-keyring.md#kms-keyring-id). AWS KMS keys Contoh ini menggunakan kunci generator, yang diidentifikasi oleh [alias ARN](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-alias-ARN), dan satu kunci tambahan, yang diidentifikasi oleh ARN [kunci](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN).  
Jika Anda berencana untuk menggunakan kembali AWS KMS keyring Anda untuk mendekripsi, Anda harus menggunakan kunci ARNs untuk mengidentifikasi di AWS KMS keys keyring.
Sebelum menjalankan kode ini, ganti AWS KMS key pengidentifikasi contoh dengan pengidentifikasi yang valid. Anda harus memiliki [izin yang diperlukan untuk menggunakan AWS KMS keys di](use-kms-keyring.md#kms-keyring-permissions) keyring.  
Mulailah dengan memberikan kredensil Anda ke browser. AWS Encryption SDK for JavaScript Contohnya menggunakan [webpack. DefinePlugin](https://webpack.js.org/plugins/define-plugin/), yang menggantikan konstanta kredenal dengan kredensil Anda yang sebenarnya. Tetapi Anda dapat menggunakan metode apa pun untuk memberikan kredensil Anda. Kemudian, gunakan kredensialnya untuk membuat klien. AWS KMS   

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

const clientProvider = getClient(KMS, {
  credentials: {
    accessKeyId,
    secretAccessKey,
    sessionToken
  }
})
```
Selanjutnya, tentukan AWS KMS keys untuk kunci generator dan kunci tambahan. Kemudian, buat AWS KMS keyring menggunakan AWS KMS klien dan. 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 })
```

Langkah 3: Atur konteks enkripsi.  
[Konteks enkripsi adalah data](concepts.md#encryption-context) otentikasi tambahan yang sewenang-wenang dan tidak rahasia. Ketika Anda menyediakan konteks enkripsi pada enkripsi, AWS Encryption SDK kriptografis mengikat konteks enkripsi ke ciphertext sehingga konteks enkripsi yang sama diperlukan untuk mendekripsi data. Menggunakan konteks enkripsi adalah opsional, tetapi kami merekomendasikannya sebagai praktik terbaik.  
Buat objek sederhana yang mencakup pasangan konteks enkripsi. Kunci dan nilai dalam setiap pasangan harus berupa string.  

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

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

Langkah 4: Enkripsi data.  
Untuk mengenkripsi data plaintext, panggil fungsi. `encrypt` Masukkan AWS KMS keyring, data plaintext, dan konteks enkripsi.  
`encrypt`Fungsi mengembalikan [pesan terenkripsi](concepts.md#message) (`result`) yang berisi data terenkripsi, kunci data terenkripsi, dan metadata penting, termasuk konteks enkripsi dan tanda tangan.  
Anda dapat [mendekripsi pesan terenkripsi ini](#javascript-example-decrypt) dengan menggunakan AWS Encryption SDK untuk bahasa pemrograman yang didukung.  

```
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 })
```

## Mendekripsi data dengan keyring AWS KMS
<a name="javascript-example-decrypt"></a>

Anda dapat menggunakan AWS Encryption SDK for JavaScript untuk mendekripsi pesan terenkripsi dan memulihkan data asli.

Dalam contoh ini, kami mendekripsi data yang kami enkripsi dalam contoh. [Mengenkripsi data dengan keyring AWS KMS](#javascript-example-encrypt)

Langkah 1: Tetapkan kebijakan komitmen.  
Dimulai pada versi 1.7. *x* dari AWS Encryption SDK for JavaScript, Anda dapat mengatur kebijakan komitmen ketika Anda memanggil `buildClient` fungsi baru yang membuat instance AWS Encryption SDK klien. `buildClient`Fungsi ini mengambil nilai yang disebutkan yang mewakili kebijakan komitmen Anda. Ini mengembalikan `decrypt` fungsi yang diperbarui `encrypt` dan memberlakukan kebijakan komitmen Anda saat Anda mengenkripsi dan mendekripsi.  
Contoh berikut menggunakan `buildClient` fungsi untuk menentukan [kebijakan komitmen default](migrate-commitment-policy.md),`REQUIRE_ENCRYPT_REQUIRE_DECRYPT`. Anda juga dapat menggunakan `buildClient` untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat [Membatasi kunci data terenkripsi](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
)
```

Langkah 2: Bangun keyring.  
Untuk mendekripsi data, masukkan [pesan terenkripsi](concepts.md#message) (`result`) yang dikembalikan fungsi. `encrypt` Pesan terenkripsi mencakup data terenkripsi, kunci data terenkripsi, dan metadata penting, termasuk konteks enkripsi dan tanda tangan.  
Anda juga harus menentukan [AWS KMS keyring](use-kms-keyring.md) saat mendekripsi. Anda dapat menggunakan keyring yang sama yang digunakan untuk mengenkripsi data atau keyring yang berbeda. Agar berhasil, setidaknya satu AWS KMS key di keyring dekripsi harus dapat mendekripsi salah satu kunci data terenkripsi dalam pesan terenkripsi. Karena tidak ada kunci data yang dihasilkan, Anda tidak perlu menentukan kunci generator dalam keyring dekripsi. Jika Anda melakukannya, kunci generator dan kunci tambahan diperlakukan dengan cara yang sama.  
[Untuk menentukan AWS KMS key untuk keyring dekripsi di AWS Encryption SDK for JavaScript, Anda harus menggunakan kunci ARN.](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) Kalau tidak, AWS KMS key tidak dikenali. Untuk bantuan mengidentifikasi AWS KMS keys dalam AWS KMS gantungan kunci, lihat [Mengidentifikasi AWS KMS keys dalam AWS KMS keyring](use-kms-keyring.md#kms-keyring-id)  
Jika Anda menggunakan keyring yang sama untuk mengenkripsi dan mendekripsi, gunakan kunci ARNs untuk mengidentifikasi di keyring. AWS KMS keys 
Dalam contoh ini, kami membuat keyring yang hanya menyertakan salah satu dari keyring enkripsi. AWS KMS keys Sebelum menjalankan kode ini, ganti contoh kunci ARN dengan yang valid. Anda harus memiliki `kms:Decrypt` izin pada AWS KMS key.  
Mulailah dengan memberikan kredensil Anda ke browser. AWS Encryption SDK for JavaScript Contohnya menggunakan [webpack. DefinePlugin](https://webpack.js.org/plugins/define-plugin/), yang menggantikan konstanta kredenal dengan kredensil Anda yang sebenarnya. Tetapi Anda dapat menggunakan metode apa pun untuk memberikan kredensil Anda. Kemudian, gunakan kredensialnya untuk membuat klien. AWS KMS   

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

const clientProvider = getClient(KMS, {
  credentials: {
    accessKeyId,
    secretAccessKey,
    sessionToken
  }
})
```
Selanjutnya, buat AWS KMS keyring menggunakan AWS KMS klien. Contoh ini hanya menggunakan salah satu AWS KMS keys dari keyring enkripsi.  

```
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 })
```

Langkah 3: Dekripsi data.  
Selanjutnya, panggil `decrypt` fungsinya. Masukkan keyring dekripsi yang baru saja Anda buat (`keyring`) dan [pesan terenkripsi](concepts.md#message) yang dikembalikan oleh fungsi (). `encrypt` `result` AWS Encryption SDK Menggunakan keyring untuk mendekripsi salah satu kunci data terenkripsi. Kemudian menggunakan kunci data plaintext untuk mendekripsi data.  
Jika panggilan berhasil, `plaintext` bidang berisi data plaintext (didekripsi). `messageHeader`Bidang berisi metadata tentang proses dekripsi, termasuk konteks enkripsi yang digunakan untuk mendekripsi data.  

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

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

Langkah 4: Verifikasi konteks enkripsi.  
[Konteks enkripsi](concepts.md#encryption-context) yang digunakan untuk mendekripsi data disertakan dalam header pesan (`messageHeader`) yang dikembalikan `decrypt` fungsi. Sebelum aplikasi Anda mengembalikan data plaintext, verifikasi bahwa konteks enkripsi yang Anda berikan saat mengenkripsi disertakan dalam konteks enkripsi yang digunakan saat mendekripsi. Ketidakcocokan mungkin menunjukkan bahwa data telah dirusak, atau bahwa Anda tidak mendekripsi ciphertext yang tepat.  
Saat memverifikasi konteks enkripsi, tidak memerlukan kecocokan persis. Saat Anda menggunakan algoritma enkripsi dengan penandatanganan, [pengelola materi kriptografi](concepts.md#crypt-materials-manager) (CMM) menambahkan kunci penandatanganan publik ke konteks enkripsi sebelum mengenkripsi pesan. Tetapi semua pasangan konteks enkripsi yang Anda kirimkan harus disertakan dalam konteks enkripsi yang dikembalikan.  
Pertama, dapatkan konteks enkripsi dari header pesan. Kemudian, verifikasi bahwa setiap pasangan kunci-nilai dalam konteks enkripsi asli (`context`) cocok dengan pasangan kunci-nilai dalam konteks enkripsi yang dikembalikan (). `encryptionContext`  

```
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')
})
```
Jika pemeriksaan konteks enkripsi berhasil, Anda dapat mengembalikan data teks biasa.