我对 AWS 云环境比较陌生,所以我的知识总体上是有限的。如果这些是简单直接的问题并询问样本,我提前道歉。
我也在 SO 上环顾四周以获取更多信息,但找不到太多信息。也许我在寻找错误的东西。任何帮助将不胜感激。
我正在尝试使用AWS KMS来加密我的应用程序中的一个数据元素。阅读文档后,我的理解如下:
- 我需要在我的 AWS 账户中有一个 CMK。我已经在我的账户中创建了一个由 AWS 管理的 CMK。
- 记下我从控制台为我的 CMK 获得的 CMK 的密钥 ID 或别名。
- 通过传递 KeyID 或 Alias 和 KeySpec 创建一个 GenerateDataKeyRequest 对象。
- 使用 awskmsClient.generateDataKey() 方法生成数据密钥并传递上述 GenerateDataKeyRequest 对象。
- 上述步骤将为我提供 GenerateDataKeyResult 对象,该对象将具有 Data Key 的“plaintext”和“ciphertextblob”值。
我有如下代码:
AWSKMS awsKmsClient = AWSKMSClientBuilder.standard().build();
GenerateDataKeyRequest keyRequest = new GenerateDataKeyRequest()
.withKeyId("alias/MyKeyAlias")
.withKeySpec("AES_256");
GenerateDataKeyResult dataKeyResponse = awsKmsClient .generateDataKey(keyRequest );
System.out.println("Plaintext Data Key: " + dataKeyResponse.getPlaintext());
System.out.println("Ciphertext Data Key: " + dataKeyResponse.getCiphertextBlob());
文档说使用“明文”数据密钥加密我的数据并删除“明文”数据密钥。
我的第一个问题是:如何使用“明文”数据密钥加密我的数据?
我无法在文档中找到有关如何执行此操作的位置。或者使用哪个 API。AWSKMSClient 类中有一个“加密”方法,但只能与CMK 的 KeyID一起使用,而不能与数据密钥一起使用。还是我理解错了?
然后文档还说要存储加密数据和“ ciphertextblob ”数据密钥。这在 AWS KMS 术语中称为信封加密。我无法弄清楚我该怎么做。在这方面的任何帮助将不胜感激。
根据文档,我们需要采取以下步骤来解密:
使用存储的“ciphertextblob”数据密钥获取“明文”数据密钥。
使用上述“明文”数据密钥解密数据。
我对此也有几个问题,如下所示:
在数据库中存储加密数据和“ ciphertextblob ”数据密钥的最佳方式是什么?
如何从存储的“ciphertextblob”数据密钥中获取“明文”数据密钥?
最后,如何使用在上述步骤中获得的“明文”数据密钥解密我的数据?
如果您能为上述问题提供示例代码,我将不胜感激。或者请给我指出正确的方向来实现上述目标。
谢谢你。