

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

# Utilizzo del client di crittografia DynamoDB per Java
<a name="java-using"></a>

**Nota**  
La nostra libreria di crittografia lato client è stata [rinominata](DDBEC-rename.md) Database Encryption SDK. AWS Il seguente argomento fornisce informazioni sulle versioni 1. *x* —2. *x* del DynamoDB Encryption Client for Java e versioni 1. *x —3.* *x* del client di crittografia DynamoDB per Python. Per ulteriori informazioni, consulta [AWS Database Encryption SDK per il supporto della versione DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Questo argomento spiega alcune funzionalità del DynamoDB Encryption Client in Java che potrebbero non essere presenti in altre implementazioni del linguaggio di programmazione. 

[Per i dettagli sulla programmazione con il DynamoDB Encryption Client, consulta gli esempi [Java](java-examples.md), gli esempi in [the](https://github.com/aws/aws-dynamodb-encryption-java/tree/master/examples) GitHub on e Javadoc per `aws-dynamodb-encryption-java repository` il DynamoDB Encryption Client.](https://aws.github.io/aws-database-encryption-sdk-dynamodb/)



**Topics**
+ [Componenti di crittografia dell'item](#ddbec-item-encryptor)
+ [Operazioni di attributo in Java](#attribute-actions-java)
+ [Sovrascrivere i nomi delle tabelle](#override-table-name)

## Crittografi degli oggetti: DynamodbEncryptor
<a name="ddbec-item-encryptor"></a>

[Il DynamoDB Encryptor Client in Java ha [un solo elemento di crittografia: il DynamodbEncryptor](DDBEC-legacy-concepts.md#item-encryptor) di livello inferiore](https://aws.github.io/aws-database-encryption-sdk-dynamodb/com/amazonaws/services/dynamodbv2/datamodeling/sdkv2/encryption/DynamoDBEncryptor.html) 

## Operazioni di attributo in Java
<a name="attribute-actions-java"></a>

Le [operazioni di attributo](DDBEC-legacy-concepts.md#legacy-attribute-actions) determinano quali valori attributo sono crittografati e firmati, quali solo firmati e quali ignorati.

**Importante**  
Dopo aver utilizzato le azioni degli attributi per crittografare gli elementi della tabella, l'aggiunta o la rimozione di attributi dal modello di dati potrebbe causare un errore di convalida della firma che impedisce di decrittografare i dati. Per una spiegazione dettagliata, consulta [Modifica del modello di dati](data-model.md).

### Operazioni di attributo per il componente DynamoDBEncryptor
<a name="attribute-action-default"></a>

Per specificare le operazioni di attributo quando utilizzi direttamente il componente [DynamoDBEncryptor](https://aws.github.io/aws-database-encryption-sdk-dynamodb/com/amazonaws/services/dynamodbv2/datamodeling/sdkv2/encryption/DynamoDBEncryptor.html), crea un oggetto `HashMap` in cui le coppie nome-valore rappresentano i nomi degli attributi e le operazioni specificate. 

I valori sono validi per le operazioni di attributo definite nel tipo enumerato `EncryptionFlags`. Puoi utilizzare `ENCRYPT` e `SIGN` insieme o solo `SIGN` o ometterle entrambe. Tuttavia, se si utilizza `ENCRYPT` da solo, il client di crittografia DynamoDB genera un errore. Non puoi crittografare un attributo non firmato.

```
ENCRYPT
SIGN
```

**avvertimento**  
Non crittografare gli attributi che vengono usati per la chiave primaria. Devono rimanere in testo semplice in modo che DynamoDB possa trovare l'elemento senza eseguire una scansione completa della tabella.

Se si specifica una chiave primaria nel contesto di crittografia e quindi si specifica `ENCRYPT` nell'azione di attributo per uno degli attributi della chiave primaria, il client di crittografia DynamoDB genera un'eccezione.

Ad esempio, il seguente codice Java crea un codice `actions` HashMap che crittografa e firma tutti gli attributi dell'elemento. `record` Le eccezioni sono la chiave di partizione e gli attributi della chiave di ordinamento, che sono firmati ma non crittografati, e l'attributo `test`, che non è firmato o crittografato.

```
final EnumSet<EncryptionFlags> signOnly = EnumSet.of(EncryptionFlags.SIGN);
final EnumSet<EncryptionFlags> encryptAndSign = EnumSet.of(EncryptionFlags.ENCRYPT, EncryptionFlags.SIGN);
final Map<String, Set<EncryptionFlags>> actions = new HashMap<>();

for (final String attributeName : record.keySet()) {
  switch (attributeName) {
    case partitionKeyName: // no break; falls through to next case
    case sortKeyName:
      // Partition and sort keys must not be encrypted, but should be signed
      actions.put(attributeName, signOnly);
      break;
    case "test":
      // Don't encrypt or sign
      break;
    default:
      // Encrypt and sign everything else
      actions.put(attributeName, encryptAndSign);
      break;
  }
}
```

Successivamente, quando chiami il metodo [encryptRecord](https://aws.github.io/aws-database-encryption-sdk-dynamodb/com/amazonaws/services/dynamodbv2/datamodeling/sdkv2/encryption/DynamoDBEncryptor.html#encryptRecord-java.util.Map-java.util.Map-com.amazonaws.services.dynamodbv2.datamodeling.sdkv2.encryption.EncryptionContext-) del componente `DynamoDBEncryptor`, devi specificare la mappa come valore del parametro `attributeFlags`. Ad esempio, questa chiamata a `encryptRecord` utilizza la mappa `actions`.

```
// Encrypt the plaintext record
final Map<String, AttributeValue> encrypted_record = encryptor.encryptRecord(record, actions, encryptionContext);
```

## Sovrascrivere i nomi delle tabelle
<a name="override-table-name"></a>

Nel DynamoDB Encryption Client, il nome della tabella DynamoDB è un elemento del contesto di crittografia [DynamoDB che viene passato ai metodi di crittografia e decrittografia](concepts.md#encryption-context). Quando si crittografano o si firmano gli elementi della tabella, il contesto di crittografia DynamoDB, incluso il nome della tabella, è associato crittograficamente al testo cifrato. Se il contesto di crittografia DynamoDB passato al metodo decrypt non corrisponde al contesto di crittografia DynamoDB passato al metodo encrypt, l'operazione di decrittografia ha esito negativo.

In alcuni casi, il nome di una tabella cambia, ad esempio quando esegui il backup di una tabella oppure quando esegui un [ripristino point-in-time](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/PointInTimeRecovery.html). Quando si decrittografa o si verifica la firma di questi elementi, è necessario passare nello stesso contesto di crittografia DynamoDB utilizzato per crittografare e firmare gli elementi, incluso il nome della tabella originale. Il nome della tabella corrente non è necessario. 

Quando si utilizza`DynamoDBEncryptor`, si assembla manualmente il contesto di crittografia DynamoDB. Pertanto, non utilizzate gli operatori che sostituiscono i nomi delle tabelle se utilizzate. `DynamoDBEncryptor` Crea invece un contesto di crittografia con il nome della tabella originale e invialo al metodo di decrittografia.