

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 客户端加密
<a name="client-side-encryption"></a>

[AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) 包含一个 API 操作，用于使用 KMS 密钥执行信封加密。有关完整的建议和使用详细信息，请参阅[相关文档](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/)。客户端应用程序可以使用 AWS Encryption SDK 来执行信封加密 AWS KMS。

```
// Instantiate the SDK
final AwsCrypto crypto = new AwsCrypto();
// Set up the KmsMasterKeyProvider backed by the default credentials
final KmsMasterKeyProvider prov = new KmsMasterKeyProvider(keyId); 
// Do the encryption
final byte[] ciphertext = crypto.encryptData(prov, message);
```

客户端应用程序可以运行以下步骤：

1. 在 KMS 密钥下请求新数据密钥。将返回加密的数据密钥和数据密钥的明文版本。

1. 在中 AWS Encryption SDK，使用纯文本数据密钥对消息进行加密。然后，明文数据密钥将从内存中删除。

1. 加密的数据密钥和加密的消息将组成一个密文字节数组。

![\[AWS Encryption SDK 信封加密。\]](http://docs.aws.amazon.com/zh_cn/kms/latest/cryptographic-details/images/sdk-envelope-encryption.png)


可以使用解密功能对信封加密的消息进行解密，以获取最初加密的消息。

```
final AwsCrypto crypto = new AwsCrypto();
final KmsMasterKeyProvider prov = new KmsMasterKeyProvider(keyId);
// Decrypt the data
final CryptoResult<byte[], KmsMasterKey> res = crypto.decryptData(prov, ciphertext);
// We need to check the KMS key to ensure that the 
// assumed key was used
if (!res.getMasterKeyIds().get(0).equals(keyId)) {
     throw new IllegalStateException("Wrong key id!");
}
byte[] plaintext = res.getResult();
```

1. 解 AWS Encryption SDK 析信封加密的消息以获取加密的数据密钥并 AWS KMS 向请求解密数据密钥。

1.  AWS Encryption SDK 接收来自的纯文本数据密钥。 AWS KMS

1. 该数据密钥随后用于解密消息，从而返回初始明文。

![\[AWS Encryption SDK 信封解密。\]](http://docs.aws.amazon.com/zh_cn/kms/latest/cryptographic-details/images/sdk-envelope-decryption.png)
