

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# SDK di crittografia AWS per JavaScript
<a name="javascript"></a>

 SDK di crittografia AWS per JavaScript È progettato per fornire una libreria di crittografia lato client per gli sviluppatori che scrivono applicazioni per browser Web JavaScript o applicazioni server Web in Node.js.

Come tutte le implementazioni di AWS Encryption SDK, SDK di crittografia AWS per JavaScript offre funzionalità avanzate di protezione dei dati. Queste includono la [crittografia envelope](concepts.md#envelope-encryption), dati autenticati aggiuntivi (AAD) e [suite di algoritmi](concepts.md#crypto-algorithm) di chiavi simmetriche, autenticate e sicure, come, ad esempio, AES-GCM a 256 bit con derivazione della chiave e firma.

Tutte le implementazioni specifiche del linguaggio AWS Encryption SDK sono progettate per essere interoperabili, fatte salve i vincoli del linguaggio. Per informazioni dettagliate sui vincoli linguistici per, vedere. JavaScript [Compatibilità del SDK di crittografia AWS per JavaScript](javascript-compatibility.md)

**Ulteriori informazioni**
+ Per dettagli sulla programmazione con SDK di crittografia AWS per JavaScript, consultate il [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)repository su. GitHub
+ Per esempi di programmazione, consulta i moduli [example-browser [SDK di crittografia AWS per JavaScript esempi](js-examples.md) ed [example-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-node) presenti nel](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-browser) repository. [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/) 
+  Per un esempio reale di utilizzo di per SDK di crittografia AWS per JavaScript crittografare i dati in un'applicazione Web, consultate [How to enable encryption in a browser with and Node.js nel](https://aws.amazon.com/blogs/security/how-to-enable-encryption-browser-aws-encryption-sdk-javascript-node-js/) Security Blog. SDK di crittografia AWS per JavaScript AWS 

**Topics**
+ [Compatibilità](javascript-compatibility.md)
+ [Installazione](javascript-installation.md)
+ [Moduli](javascript-modules.md)
+ [Esempi](js-examples.md)

# Compatibilità del SDK di crittografia AWS per JavaScript
<a name="javascript-compatibility"></a>

 SDK di crittografia AWS per JavaScript È progettato per essere interoperabile con altre implementazioni linguistiche di. AWS Encryption SDK[Nella maggior parte dei casi, è possibile crittografare i dati con SDK di crittografia AWS per JavaScript e decrittografarli con qualsiasi altra implementazione linguistica, inclusa l'interfaccia a riga di comando.AWS Encryption SDK](crypto-cli.md) Inoltre, è possibile utilizzare il SDK di crittografia AWS per JavaScript per decrittografare i [messaggi crittografati](concepts.md#message) prodotti da altre implementazioni linguistiche di. AWS Encryption SDK

Tuttavia, quando si utilizza il SDK di crittografia AWS per JavaScript, è necessario essere consapevoli di alcuni problemi di compatibilità nell'implementazione del JavaScript linguaggio e nei browser Web.

Inoltre, quando utilizzi implementazioni linguistiche diverse, assicurati di configurare provider di chiavi principali, chiavi master e portachiavi compatibili. Per informazioni dettagliate, vedi [Compatibilità dei keyring](choose-keyring.md#keyring-compatibility).

## SDK di crittografia AWS per JavaScript compatibilità
<a name="javascript-language-compatibility"></a>

L' JavaScript implementazione di si AWS Encryption SDK differenzia dalle altre implementazioni linguistiche nei seguenti modi:
+ L'operazione di crittografia di SDK di crittografia AWS per JavaScript non restituisce testo cifrato senza frame. Tuttavia, SDK di crittografia AWS per JavaScript decrittograferà il testo cifrato con e senza cornice restituito da altre implementazioni linguistiche di. AWS Encryption SDK
+ A partire da Node.js versione 12.9.0, Node.js supporta le seguenti opzioni di wrapping chiave RSA:
  +  SHA384OAEP con,, o SHA1 SHA256 SHA512
  + OAEP con e con SHA1 MGF1 SHA1
  + PKCS1v15
+ Prima della versione 12.9.0, Node.js supporta solo le seguenti opzioni di wrapping della chiave RSA:
  + OAEP con e con SHA1 MGF1 SHA1
  + PKCS1v15

## Compatibilità browser
<a name="javascript-browser-compatibility"></a>

Alcuni browser Web non supportano le operazioni di crittografia di base richieste da SDK di crittografia AWS per JavaScript . È possibile compensare alcune delle operazioni mancanti configurando un fallback per l' WebCrypto API implementata dal browser.

**Limitazioni del browser Web**

Le seguenti limitazioni sono comuni a tutti i browser Web:
+ L' WebCrypto API non supporta il key wrapping. PKCS1v15 
+ I browser non supportano chiavi a 192 bit.

**Operazioni crittografiche richieste**

 SDK di crittografia AWS per JavaScript Richiede le seguenti operazioni nei browser Web. Se un browser non supporta queste operazioni, non è compatibile con SDK di crittografia AWS per JavaScript.
+ Il browser deve includere `crypto.getRandomValues()`, che è un metodo per generare valori crittograficamente casuali. Per informazioni sulle versioni dei browser Web che supportano`crypto.getRandomValues()`, consulta [Posso usare le criptovalute. getRandomValues()?](https://caniuse.com/#feat=getrandomvalues) .

**Fallback richiesto**

 SDK di crittografia AWS per JavaScript Richiede le seguenti librerie e operazioni nei browser Web. Se si supporta un browser Web che non soddisfa questi requisiti, è necessario configurare un fallback. In caso contrario, i tentativi di utilizzarlo SDK di crittografia AWS per JavaScript con il browser falliranno.
+ L' WebCrypto API, che esegue operazioni crittografiche di base nelle applicazioni Web, non è disponibile per tutti i browser. Per informazioni sulle versioni del browser Web che supportano la crittografia Web, consulta [Posso utilizzare la crittografia Web?](https://caniuse.com/#feat=cryptography).
+ Le versioni moderne del browser web Safari non supportano la crittografia AES-GCM a zero byte, come richiesto. AWS Encryption SDK Se il browser implementa l' WebCrypto API, ma non può utilizzare AES-GCM per crittografare zero byte, utilizza la libreria di fallback solo per la crittografia a zero byte. SDK di crittografia AWS per JavaScript WebCrypto Utilizza l'API per tutte le altre operazioni.

Per configurare un fallback per entrambe le limitazioni, aggiungere le istruzioni seguenti al codice. Nella funzione [configureFallback](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/web-crypto-backend/src/backend-factory.ts#L78) specificare una libreria che supporti le funzionalità mancanti. L'esempio seguente utilizza la Microsoft Research JavaScript Cryptography Library (`msrcrypto`), ma è possibile sostituirla con una libreria compatibile. Per un esempio completo, consulta [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)
```

# Installazione del SDK di crittografia AWS per JavaScript
<a name="javascript-installation"></a>

 SDK di crittografia AWS per JavaScript Consiste in una raccolta di moduli interdipendenti. Molti dei moduli sono solo raccolte di moduli progettati per lavorare insieme. Alcuni moduli sono progettati per funzionare in modo indipendente. Alcuni moduli sono necessari per tutte le implementazioni; alcuni altri sono necessari solo per casi speciali. Per informazioni sui moduli nel modulo JavaScript, consulta [Moduli in SDK di crittografia AWS per JavaScript](javascript-modules.md) e il `README.md` file contenuto in ciascuno dei moduli del [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules)repository su. AWS Encryption SDK GitHub

**Nota**  
[Tutte le versioni SDK di crittografia AWS per JavaScript precedenti alla 2.0.0 sono in fase di sviluppo. end-of-support](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)  
È possibile eseguire l'aggiornamento in tutta sicurezza dalla versione 2.0. *x* e versioni successive alla versione più recente di SDK di crittografia AWS per JavaScript senza modifiche al codice o ai dati. Tuttavia, nella versione 2.0 sono state introdotte [nuove funzionalità di sicurezza](about-versions.md#version-2). *x* non sono retrocompatibili. Per eseguire l'aggiornamento da versioni precedenti alla 1.7. *x* alla versione 2.0. *x* e versioni successive, è necessario prima eseguire l'aggiornamento alla versione più recente 1. versione *x* di SDK di crittografia AWS per JavaScript. Per informazioni dettagliate, vedi [Migrazione del tuo AWS Encryption SDK](migration.md).

Per installare i moduli, utilizzare il [gestore di pacchetti npm](https://www.npmjs.com/get-npm). 

Ad esempio, per installare il `client-node` modulo, che include tutti i moduli necessari per la programmazione SDK di crittografia AWS per JavaScript in Node.js, utilizzate il comando seguente. 

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

Per installare il `client-browser` modulo, che include tutti i moduli necessari per la programmazione SDK di crittografia AWS per JavaScript nel browser, utilizzate il seguente comando. 

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

Per esempi pratici di utilizzo di SDK di crittografia AWS per JavaScript, consultate gli esempi in `example-node` e i `example-browser` moduli nel [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)repository su GitHub.

# Moduli in SDK di crittografia AWS per JavaScript
<a name="javascript-modules"></a>

I moduli inclusi SDK di crittografia AWS per JavaScript semplificano l'installazione del codice necessario per i progetti.

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

[client-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/client-node)  
Include tutti i moduli necessari per la programmazione SDK di crittografia AWS per JavaScript in Node.js.

[caching-materials-manager-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/caching-materials-manager-node)  
Esporta funzioni che supportano la funzionalità di memorizzazione nella [cache delle chiavi di dati](data-key-caching.md) SDK di crittografia AWS per JavaScript in Node.js. 

[decrypt-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/decrypt-node)  
Esporta le funzioni che decrittano e verificano i messaggi crittografati che rappresentano dati e flussi di dati. Incluse nel modulo `client-node`.

[encrypt-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/encrypt-node)  
Esporta funzioni che crittografano e firmano diversi tipi di dati. Incluse nel modulo `client-node`.

[example-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-node)  
Esporta esempi funzionanti di programmazione con il file SDK di crittografia AWS per JavaScript in Node.js. Include esempio di diversi tipi di keyring e diversi tipi di dati.

[hkdf-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/hkdf-node)  
Esporta una [Key Derivation Function (HKDF) basata su HMAC](https://en.wikipedia.org/wiki/HKDF) che SDK di crittografia AWS per JavaScript in Node.js utilizza in particolari suite di algoritmi. SDK di crittografia AWS per JavaScript Nel browser utilizza la funzione HKDF nativa nell'API. WebCrypto 

[integration-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/integration-node)  
Definisce i test che verificano che SDK di crittografia AWS per JavaScript in Node.js sia compatibile con altre implementazioni linguistiche di. AWS Encryption SDK

[kms-keyring-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/kms-keyring-node)  
Esporta le funzioni che supportano i AWS KMS portachiavi in Node.js.

[raw-aes-keyring-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-aes-keyring-node)  
Esporta funzioni che supportano i [keyring AES Raw](use-raw-aes-keyring.md) in Node.js.

[raw-rsa-keyring-node](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-rsa-keyring-node)  
Esporta funzioni che supportano i [keyring RSA Raw](use-raw-rsa-keyring.md) in Node.js.

## Moduli per Browser JavaScript
<a name="jsn-modules-browser"></a>

[client-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/client-browser)  
Include tutti i moduli necessari per la programmazione SDK di crittografia AWS per JavaScript nel browser.

[caching-materials-manager-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/caching-materials-manager-browser)  
Esporta funzioni che supportano la funzionalità di memorizzazione nella [cache dei tasti dati](data-key-caching.md) JavaScript nel browser.

[decrypt-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/decrypt-browser)  
Esporta le funzioni che decrittano e verificano i messaggi crittografati che rappresentano dati e flussi di dati.

[encrypt-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/encrypt-browser)  
Esporta funzioni che crittografano e firmano diversi tipi di dati. 

[example-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/example-browser)  
Esempi funzionanti di programmazione con SDK di crittografia AWS per JavaScript il browser. Include esempi di diversi tipi di keyring e diversi tipi di dati.

[integration-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/integration-browser)  
Definisce i test che verificano che lo SDK di crittografia AWS per Java script nel browser sia compatibile con altre implementazioni linguistiche di AWS Encryption SDK.

[kms-keyring-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/kms-keyring-browser)  
Esporta le funzioni che supportano i [AWS KMS portachiavi](use-kms-keyring.md) nel browser.

[raw-aes-keyring-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-aes-keyring-browser)  
Esporta le funzioni che supportano i [keyring AES Raw](use-raw-aes-keyring.md) nel browser.

[raw-rsa-keyring-browser](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-rsa-keyring-browser)  
Esporta le funzioni che supportano i [keyring RSA Raw](use-raw-rsa-keyring.md) nel browser.

## Moduli per tutte le implementazioni
<a name="jsn-modules-all"></a>

[cache-material](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/cache-material)  
Supporta la funzione di [memorizzazione nella cache della chiave dati](data-key-caching.md). Fornisce il codice per l'assemblaggio dei materiali crittografici memorizzati nella cache con ogni chiave di dati.

[kms-keyring](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/kms-keyring)  
Esporta le funzioni che supportano i [keyring KMS](use-kms-keyring.md).

[material-management](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/material-management)  
Implementa il [gestore dei materiali crittografici](concepts.md#crypt-materials-manager) (CMM).

[raw-keyring](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/raw-keyring)  
Esporta le funzioni necessarie per i keyring AES e RSA non elaborati.

[serialize](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/serialize)  
Esporta le funzioni che l'SDK utilizza per serializzare il suo output.

[web-crypto-backend](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules/web-crypto-backend)  
Esporta le funzioni che utilizzano l' WebCrypto API SDK di crittografia AWS per JavaScript nel browser.

# SDK di crittografia AWS per JavaScript esempi
<a name="js-examples"></a>

Gli esempi seguenti illustrano come utilizzare SDK di crittografia AWS per JavaScript per crittografare e decrittare i dati. 

Puoi trovare altri esempi di utilizzo dei moduli [example-node ed [example-browser SDK di crittografia AWS per 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) nel repository su. [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/) GitHub Questi moduli di esempio non vengono installati quando installi i moduli `client-browser` o `client-node`.

**Vedi gli esempi di codice completi**: Nodo: [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 Crittografia dei dati con un portachiavi](#javascript-example-encrypt)
+ [Decrittografia dei dati con un portachiavi AWS KMS](#javascript-example-decrypt)

## AWS KMS Crittografia dei dati con un portachiavi
<a name="javascript-example-encrypt"></a>

L'esempio seguente mostra come utilizzare per crittografare e SDK di crittografia AWS per JavaScript decrittografare una stringa breve o un array di byte. 

Questo esempio presenta un [AWS KMS portachiavi](use-kms-keyring.md), un tipo di portachiavi che utilizza un AWS KMS key per generare e crittografare chiavi di dati. *Per informazioni sulla creazione di un AWS KMS key, consulta [Creating Keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) nella Developer Guide.AWS Key Management Service * Per informazioni su come identificarle AWS KMS keys in un AWS KMS portachiavi, consulta [Identificazione AWS KMS keys in un portachiavi AWS KMS](use-kms-keyring.md#kms-keyring-id)

Fase 1: Impostare la politica di impegno.  
A partire dalla versione 1.7. *x* of the SDK di crittografia AWS per JavaScript, è possibile impostare la politica di impegno quando si chiama la nuova `buildClient` funzione che crea un'istanza di un AWS Encryption SDK client. La `buildClient` funzione assume un valore enumerato che rappresenta la politica di impegno dell'utente. Restituisce `decrypt` funzioni aggiornate `encrypt` e che applicano la politica di impegno dell'utente durante la crittografia e la decrittografia.  
Gli esempi seguenti utilizzano la `buildClient` funzione per specificare la politica di impegno [predefinita](migrate-commitment-policy.md),. `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` È inoltre possibile utilizzare il `buildClient` per limitare il numero di chiavi di dati crittografate in un messaggio crittografato. Per ulteriori informazioni, consulta [Limitazione delle chiavi di dati crittografate](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
)
```

Fase 2: Costruisci il portachiavi.  
Crea un AWS KMS portachiavi per la crittografia.   
Quando si esegue la crittografia con un AWS KMS portachiavi, è necessario specificare una *chiave generatrice, ovvero una AWS KMS key chiave* utilizzata per generare la chiave di dati in testo semplice e crittografarla. Inoltre puoi specificare zero o più *chiavi aggiuntive* per crittografare la stessa chiave di dati di testo normale. Il portachiavi restituisce la chiave di dati in testo semplice e una copia crittografata di tale chiave dati per ogni AWS KMS key elemento del portachiavi, inclusa la chiave del generatore. Per decrittare i dati, è necessario decrittare una qualsiasi delle chiavi di dati crittografate.  
[Per specificare il AWS KMS keys portachiavi di crittografia in SDK di crittografia AWS per JavaScript, è possibile utilizzare qualsiasi identificatore di chiave supportato. AWS KMS](use-kms-keyring.md#kms-keyring-id) In questo esempio viene utilizzata una chiave generatore, identificata dal relativo [ARN di alias](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-alias-ARN) e una chiave aggiuntiva, identificata da un [ARN di chiave](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN).  
Se si prevede di riutilizzare il AWS KMS portachiavi per la decrittografia, è necessario utilizzare la chiave per identificare il portachiavi contenuto nel portachiavi ARNs . AWS KMS keys 
Prima di eseguire questo codice, sostituite gli identificatori di esempio AWS KMS key con identificatori validi. Devi disporre delle [autorizzazioni necessarie per utilizzare le AWS KMS keys](use-kms-keyring.md#kms-keyring-permissions) nel keyring.  
Inizia fornendo le credenziali nel browser. [Gli SDK di crittografia AWS per JavaScript esempi utilizzano il webpack. DefinePlugin](https://webpack.js.org/plugins/define-plugin/), che sostituisce le costanti delle credenziali con le credenziali effettive. Tuttavia puoi utilizzare qualsiasi metodo per fornire le credenziali. Quindi, utilizza le credenziali per creare un client. AWS KMS   

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

const clientProvider = getClient(KMS, {
  credentials: {
    accessKeyId,
    secretAccessKey,
    sessionToken
  }
})
```
Quindi, specifica AWS KMS keys la chiave del generatore e la chiave aggiuntiva. Quindi, crea un AWS KMS portachiavi utilizzando il AWS KMS client e il 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 })
```

Passaggio 3: Impostare il contesto di crittografia.  
Un [contesto di crittografia](concepts.md#encryption-context) è rappresentato da tipi di dati autenticati aggiuntivi arbitrari e non segreti. Quando si fornisce un contesto di crittografia su encrypt, associa AWS Encryption SDK crittograficamente il contesto di crittografia al testo cifrato in modo che sia necessario lo stesso contesto di crittografia per decrittografare i dati. L'utilizzo di un contesto di crittografia è facoltativo, ma viene consigliato come best practice.  
Crea un oggetto semplice che includa le coppie di contesto di crittografia. La chiave e il valore di ogni coppia devono essere una stringa.  

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

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

Fase 4: Crittografare i dati.  
Per crittografare i dati di testo normale, chiama la funzione `encrypt`. Inserisci il AWS KMS portachiavi, i dati in chiaro e il contesto di crittografia.  
La funzione `encrypt` restituisce un [messaggio crittografato](concepts.md#message) (`result`) che contiene i dati crittografati, le chiavi di dati crittografate e i metadati importanti, inclusi il contesto di crittografia e la firma.  
È possibile [decrittografare questo messaggio crittografato utilizzando il](#javascript-example-decrypt) AWS Encryption SDK per qualsiasi linguaggio di programmazione supportato.  

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

## Decrittografia dei dati con un portachiavi AWS KMS
<a name="javascript-example-decrypt"></a>

È possibile utilizzare il SDK di crittografia AWS per JavaScript per decrittografare il messaggio crittografato e recuperare i dati originali.

In questo esempio, esegui la decrittazione dei dati crittografati nell'esempio [AWS KMS Crittografia dei dati con un portachiavi](#javascript-example-encrypt).

Fase 1: Impostare la politica di impegno.  
A partire dalla versione 1.7. *x* of the SDK di crittografia AWS per JavaScript, è possibile impostare la politica di impegno quando si chiama la nuova `buildClient` funzione che crea un'istanza di un AWS Encryption SDK client. La `buildClient` funzione assume un valore enumerato che rappresenta la politica di impegno dell'utente. Restituisce `decrypt` funzioni aggiornate `encrypt` e che applicano la politica di impegno dell'utente durante la crittografia e la decrittografia.  
Gli esempi seguenti utilizzano la `buildClient` funzione per specificare la politica di impegno [predefinita](migrate-commitment-policy.md),. `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` È inoltre possibile utilizzare il `buildClient` per limitare il numero di chiavi di dati crittografate in un messaggio crittografato. Per ulteriori informazioni, consulta [Limitazione delle chiavi di dati crittografate](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
)
```

Fase 2: Costruisci il portachiavi.  
Per decrittare i dati, passa il [messaggio crittografato](concepts.md#message) (`result`) restituito dalla funzione `encrypt`. Il messaggio crittografato include i dati crittografati, le chiavi di dati crittografate e i metadati importanti, inclusi il contesto di crittografia e la firma.  
È inoltre necessario specificare un [AWS KMS portachiavi durante](use-kms-keyring.md) la decrittografia. Puoi utilizzare lo stesso keyring usato per crittografare i dati o un keyring diverso. Per avere successo, almeno uno dei membri del portachiavi di decrittografia deve essere AWS KMS key in grado di decrittografare una delle chiavi di dati crittografate nel messaggio crittografato. Poiché non vengono generate chiavi di dati, non è necessario specificare una chiave generatore in un keyring di decrittazione. Se la specifichi, la chiave generatore e le chiavi aggiuntive vengono trattate allo stesso modo.  
[Per specificare un AWS KMS key portachiavi di decrittografia in SDK di crittografia AWS per JavaScript, è necessario utilizzare la chiave ARN.](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-ARN) Altrimenti, non viene riconosciuto AWS KMS key . Per maggiori informazioni sull'identificazione AWS KMS keys di un AWS KMS portachiavi, consulta [Identificazione AWS KMS keys in un portachiavi AWS KMS](use-kms-keyring.md#kms-keyring-id)  
Se usi lo stesso portachiavi per cifrare e decriptare, usa la chiave per identificarli ARNs all'interno del portachiavi. AWS KMS keys 
In questo esempio, creiamo un portachiavi che include solo uno dei portachiavi di crittografia. AWS KMS keys Prima di eseguire questo codice, sostituisci l'ARN della chiave di esempio con uno valido. Devi disporre dell'autorizzazione `kms:Decrypt` per la AWS KMS key.  
Inizia fornendo le credenziali nel browser. [Gli SDK di crittografia AWS per JavaScript esempi utilizzano il webpack. DefinePlugin](https://webpack.js.org/plugins/define-plugin/), che sostituisce le costanti delle credenziali con le credenziali effettive. Tuttavia puoi utilizzare qualsiasi metodo per fornire le credenziali. Quindi, utilizza le credenziali per creare un client. AWS KMS   

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

const clientProvider = getClient(KMS, {
  credentials: {
    accessKeyId,
    secretAccessKey,
    sessionToken
  }
})
```
Quindi, crea un AWS KMS portachiavi utilizzando il AWS KMS client. Questo esempio utilizza solo uno dei portachiavi AWS KMS keys di crittografia.  

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

Fase 3: decriptare i dati.  
A questo punto, chiama la funzione `decrypt`. Passa il keyring di decrittazione appena creato (`keyring`) e il [messaggio crittografato](concepts.md#message) restituito dalla funzione `encrypt` (`result`). AWS Encryption SDK Utilizza il portachiavi per decrittografare una delle chiavi di dati crittografate. Quindi, utilizza la chiave di dati in testo normale per decrittare i dati.  
Se la chiamata ha esito positivo, il campo `plaintext` contiene i dati di testo normale (decrittati). Il campo `messageHeader` contiene i metadati relativi al processo di decrittazione, incluso il contesto di crittografia utilizzato per decrittare i dati.  

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

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

Fase 4: Verificare il contesto di crittografia.  
Il [contesto di crittografia](concepts.md#encryption-context) utilizzato per decrittare i dati è incluso nell'intestazione del messaggio (`messageHeader`) restituita dalla funzione `decrypt`. Prima che l'applicazione restituisca i dati di testo normale, verifica che il contesto di crittografia fornito durante la crittografia sia incluso nel contesto di crittografia utilizzato per la decrittazione. Una mancata corrispondenza potrebbe indicare che i dati sono stati manomessi o che non è stato decrittato il testo crittografato corretto.  
Quando si verifica il contesto di crittografia, non è necessaria una corrispondenza esatta. Quando usi un algoritmo di crittografia con la firma, il [responsabile di materiali crittografici](concepts.md#crypt-materials-manager) (CMM) aggiunge la chiave di firma pubblica al contesto di crittografia prima di crittografare il messaggio. Tuttavia, tutte le coppie di contesto di crittografia inviate devono essere incluse nel contesto di crittografia restituito.  
Innanzitutto, ottieni il contesto di crittografia dall'intestazione del messaggio. Verifica quindi che ogni coppia chiave-valore nel contesto di crittografia originale (`context`) corrisponda a una coppia chiave-valore nel contesto di crittografia restituito (`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')
})
```
Se il controllo del contesto di crittografia ha esito positivo, puoi restituire i dati di testo normale.