

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

# 重新加密加密对象
<a name="reencrypting-an-encrypted-object"></a>

在一个 KMS 密钥下加密的现有客户密文可以通过重新加密命令重新加密为另一个 KMS 密钥。重新加密使用新的 KMS 密钥加密服务器端的数据，而不公开客户端密钥的明文。将先解密数据，然后再加密。

以下是请求语法。

```
{
	"CiphertextBlob": "blob",
	"DestinationEncryptionContext": { "string" : "string" },
	"DestinationKeyId": "string",
	"GrantTokens": ["string"],
       "SourceKeyId": "string",
	"SourceEncryptionContext": { "string" : "string"}
}
```

请求接受采用 JSON 格式的以下数据。

**CiphertextBlob**  
要重新加密的数据的密文。

** DestinationEncryptionContext**  
（可选）重新加密数据时要使用的加密上下文。

**DestinationKeyId**  
用于重新加密数据的密钥的密钥标识符。

**GrantTokens**  
（可选）表示提供执行解密权限的授权的授权令牌列表。

**SourceKeyId**  
（可选）用于解密数据的密钥的密钥标识符。

**SourceEncryptionContext**  
（可选）用于加密和解密 `CiphertextBlob` 参数中指定的数据的加密上下文。

该过程将之前描述的解密和加密操作结合起来：客户密文在该客户密文引用的初始 HBK 下解密为预期 KMS 密钥下的当前 HBK。如果此命令中使用的 KMS 密钥相同，则此命令会将客户密文从旧版本的 HBK 移至最新版本的 HBK。

以下是响应语法。

```
{
    "CiphertextBlob": blob,
    "DestinationEncryptionAlgorithm": "string",
    "KeyId": "string",
    "SourceEncryptionAlgorithm": "string",
    "SourceKeyId": "string"
}
```

如果调用应用程序想要确保底层明文的真实性，则必须验证 SourceKeyId 返回的内容是否符合预期。