

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

# 生成数据密钥
<a name="data-keys"></a>

*数据密钥*是可用于加密数据的对称密钥，包括大量数据和其他数据加密密钥。与无法下载的对称 KMS 密钥不同的是，数据密钥可以返回给您在 Amazon KMS外部使用。

 Amazon KMS 生成数据密钥时，它会返回一个供立即使用的纯文本数据密钥（可选）和数据密钥的加密副本，您可以安全地将其与数据一起存储。当你准备好解密数据时，你首先要求 Amazon KMS 解密加密的数据密钥。

Amazon KMS 生成、加密和解密数据密钥。但是， Amazon KMS 不会存储、管理或跟踪您的数据密钥，也不会使用数据密钥执行加密操作。您必须在外部使用和管理数据密钥 Amazon KMS。有关安全使用数据密钥的帮助，请参阅 [Amazon Encryption SDK](https://docs.amazonaws.cn/encryption-sdk/latest/developer-guide/)。

**Topics**
+ [创建数据密钥](#data-keys-create)
+ [如何使用数据密钥进行加密操作](#use-data-keys)
+ [不可用的 KMS 密钥如何影响数据密钥](unusable-kms-keys.md)

## 创建数据密钥
<a name="data-keys-create"></a>

要创建数据密钥，请调用该[GenerateDataKey](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKey.html)操作。 Amazon KMS 生成数据密钥。然后，它会在您指定的[对称加密 KMS 密钥](symm-asymm-choose-key-spec.md#symmetric-cmks)下加密数据密钥的副本。此操作会返回数据密钥的明文副本以及由 KMS 密钥加密的数据密钥的副本。下图展示了此操作。

![\[生成数据密钥\]](http://docs.amazonaws.cn/kms/latest/developerguide/images/generate-data-key.png)


Amazon KMS 还支持该[GenerateDataKeyWithoutPlaintext](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)操作，该操作仅返回加密的数据密钥。当您需要使用数据密钥时，请要求对其 Amazon KMS 进行[解密](https://docs.amazonaws.cn/kms/latest/APIReference/API_Decrypt.html)。

## 如何使用数据密钥进行加密操作
<a name="use-data-keys"></a>

以下主题说明了[GenerateDataKey](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKey.html)或[GenerateDataKeyWithoutPlaintext](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)操作生成的数据密钥的工作原理。

### 使用数据密钥加密数据
<a name="data-keys-encrypt"></a>

Amazon KMS 无法使用数据密钥加密数据。但是你可以在外部使用数据密钥 Amazon KMS，例如使用 OpenSSL 或加密库，比如。[Amazon Encryption SDK](https://docs.amazonaws.cn/encryption-sdk/latest/developer-guide/)

在使用明文数据密钥加密数据后，请尽快从内存中将其删除。您可以安全地存储加密数据密钥及加密数据，以便其可根据需要用于解密数据。

![\[加密外部的用户数据 Amazon KMS\]](http://docs.amazonaws.cn/kms/latest/developerguide/images/encrypt-with-data-key.png)


### 使用数据密钥解密数据
<a name="data-keys-decrypt"></a>

要解密您的数据，请将加密的数据密钥传递给[解](https://docs.amazonaws.cn/kms/latest/APIReference/API_Decrypt.html)密操作。 Amazon KMS 使用您的 KMS 密钥解密数据密钥，然后返回纯文本数据密钥。使用明文数据密钥解密数据，并尽快从内存中删除该明文数据密钥。

下图显示了如何使用 `Decrypt` 操作解密加密的数据密钥。

![\[解密数据密钥\]](http://docs.amazonaws.cn/kms/latest/developerguide/images/decrypt.png)
