gpt4 book ai didi

java - AWS 加密 SDK 使用数据 key 加密/解密

转载 作者:搜寻专家 更新时间:2023-11-01 02:20:02 34 4
gpt4 key购买 nike

我正在尝试使用 KMS 和 AWS 加密 SDK 加密数据。查看 AWS documentation 中提供的示例,似乎没有地方可以明确设置数据 key 。

我找到了 EncryptionMaterialsRequest 类的 API 文档,它允许您使用关联的构建器类 EncryptionMaterialsRequest.Builder 设置明文 key ,并且此类有一个返回 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 生成的数据 key 来加密数据的推荐方法是什么?

最佳答案

@Viccari 是正确的,但听起来围绕这些结构的预期用途的一些上下文有助于解释原因。

除非您正在构建自定义加密 Material 管理器,否则您不应创建EncryptionMaterials;客户端和管理组件会为您处理。

客户端在每次加密调用时向加密 Material 管理器询问加密 Material 。根据加密 Material 管理器的不同,接下来发生的事情可能会有所不同。

DefaulCryptoMaterialsManager 的情况下,它会向提供的主 key 提供程序询问所有要使用的主 key ,然后使用这些主 key 生成和加密数据 key (一个用于生成和加密,任何额外的用于加密)。

对于 CachingCryptoMaterialsManager,它在客户端和另一个加密 Material 管理器之间添加了一个缓存层。

如果您想将 AWS 加密开发工具包与 AWS KMS 一起使用,推荐的方法是简单地提供一个 KmsMasterKeyKmsMasterKeyProvider 的实例,或者一个加密 Material 管理器最终在加密调用中使用其中之一。所有细节都由客户负责。

如果您对这些概念如何结合在一起的更多细节感兴趣,我们的概念文档[1] 将是一个很好的起点。

[1] https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html

关于java - AWS 加密 SDK 使用数据 key 加密/解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48413300/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com