当前位置: 首页 > 知识库问答 >
问题:

AWS加密SDK使用数据密钥加密/解密

赵晨
2023-03-14

我正在尝试使用KMS和AWS加密SDK加密数据。查看AWS文档中提供的示例,似乎没有地方可以显式设置数据键。

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;
}

使用由KMS生成的数据密钥使用AWS加密SDK加密数据的推荐方法是什么?

共有1个答案

公羊玉泽
2023-03-14

@viccari是正确的,但听起来,这些构造的预期用途的上下文可以帮助解释为什么。

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

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

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

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

 类似资料:
  • 我正在从https://docs.AWS.amazon.com/cli/latest/reference/kms/encrypt.html和https://docs.AWS.amazon.com/cli/latest/reference/kms/decrypt.html读取AWS加密cli文档。我发现我可以在不创建数据密钥的情况下加密/解密。当我阅读https://docs.aws.amazon.

  • danger 以下操作仅适用于 SDK version >= 1.1.0 当调用微信小程序接口获取敏感信息时,返回的数据往往是经过加密的,开发者如需获取这些敏感数据,需要对接口返回的加密数据进行对称解密。 wx.BaaS.wxDecryptData(encryptedData, iv, type) 参数说明 参数 类型 必填 说明 encryptedData String Y 加密的数据 iv S

  • 这是可能的还是加密必须共享和使用相同的密钥? 主要目的就是这样。 我将有两个客户端可以发送和接收加密数据到彼此。

  • 问题内容: 我想使用公共密钥加密技术在JavaScript中加密,在PHP中解密。我一直在尝试找到可以完成此任务的库,但是遇到了问题。 我目前正在使用 openpgpjs ,但是我需要所有浏览器的支持,甚至测试页在唯一列为受支持的浏览器(Google Chrome)上都有错误。 关于最终目标的注意事项: TCP连接已受SSL保护。 此保护层的主要目的是防御有意或无意的Web服务器日志记录,崩溃转储

  • 我们使用Azure Key Vault加密和解密Blob,以保护我们的文件不受开发人员或任何不想要的访问。 我创建了如下所示的RSA密钥 现在我很少怀疑了

  • 前面小节介绍了如何存储密码,但是有的时候,我们想把一些敏感数据加密后存储起来,在将来的某个时候,随需将它们解密出来,此时我们应该在选用对称加密算法来满足我们的需求。 base64加解密 如果Web应用足够简单,数据的安全性没有那么严格的要求,那么可以采用一种比较简单的加解密方法是base64,这种方式实现起来比较简单,Go语言的base64包已经很好的支持了这个,请看下面的例子: package