

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 用戶端加密
<a name="client-side-encryption"></a>

[AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) 包含使用 KMS 金鑰執行信封加密的 API 操作。如需完整的建議和用量詳細資訊，請參閱[相關文件](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_tw/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_tw/kms/latest/cryptographic-details/images/sdk-envelope-decryption.png)
