我正在尝试使用 KMS 和 AWS 加密 SDK 加密数据。查看AWS 文档中提供的示例,似乎没有明确设置数据键的地方。
我找到了EncryptionMaterialsRequest
该类的 API 文档,该文档允许您使用关联的构建器类设置明文密钥EncryptionMaterialsRequest.Builder
,并且该类有一个返回EncryptionMaterials
. EncryptionMaterials
执行加密操作时,我找不到任何地方可以使用该实例。
这是我到目前为止的代码。请注意,该EncryptionMaterials
实例未在请求中使用。
public static void encryptData(String dataToEncrypt, String keyID) {
final KmsMasterKeyProvider prov = new KmsMasterKeyProvider(keyID);
DefaultCryptoMaterialsManager manager = new DefaultCryptoMaterialsManager(prov);
byte[] plaintextKey = generateDataKey(keyID);
EncryptionMaterialsRequest request = EncryptionMaterialsRequest
.newBuilder()
.setPlaintext(plaintextKey)
.build();
EncryptionMaterials materials = manager.getMaterialsForEncrypt(request);
AwsCrypto crypto = new AwsCrypto();
String encryptedString = crypto.encryptString(manager, dataToEncrypt).getResult();
}
public byte[] generateDataKey(String keyID) {
GenerateDataKeyRequest dataKeyRequest = new GenerateDataKeyRequest();
dataKeyRequest.setKeyId(keyID);
dataKeyRequest.setKeySpec(DataKeySpec.AES_256);
GenerateDataKeyResult dataKeyResult = kmsClient.generateDataKey(dataKeyRequest);
ByteBuffer encryptedKey = dataKeyResult.getCiphertextBlob();
byte[] arr = new byte[encryptedKey.remaining()];
encryptedKey.get(arr);
return arr;
}
使用 AWS 加密 SDK 和 KMS 生成的数据密钥加密数据的推荐方法是什么?