【问题标题】:Encrypt with a AWS KMS Public Key without using an AWS SDK or CLI tool在不使用 AWS 开发工具包或 CLI 工具的情况下使用 AWS KMS 公钥进行加密
【发布时间】:2021-07-15 15:39:03
【问题描述】:

我通过 KMS CMK SDK 生成了一个公私对,并检索了公钥。我正在寻找一种在不使用 KMS SDK 或与亚马逊相关的任何东西的情况下使用此公钥加密数据的方法。然后我会再次使用 KMS API 继续解密。

问题是客户不希望与任何 AWS 相关软件集成。

另一个重要的一点是,我确实想在本地存储我的私钥,也不想访问它们。我正在使用 aws CMK keyId 来执行加密和解密。

用于生成该对的算法是:RSAES_OAEP_SHA_256 关键规范是:RSA_4096

我正在使用 Java,我正在寻找带有 java 安全包的解决方案。

任何帮助将不胜感激,如果需要更多详细信息,我会修改我的问题。

【问题讨论】:

  • 如果您使用的是 Java,为什么使用 KmsClient 会出现问题?
  • 我正在使用 KMS 客户端,问题是与我共享密钥的另一方不想使用 KMS 客户端。

标签: java amazon-web-services cryptography public-key-encryption amazon-kms


【解决方案1】:

我设法在纯 Java 中使用 RSAES_OAEP_SHA_256 算法进行加密,并使用 KMS SDK 进行解密。我的解决方案如下:

public static byte[] encrypt(String plainText, String publicKey) throws GeneralSecurityException {

    AlgorithmParameters parameters = AlgorithmParameters.getInstance("OAEP", new BouncyCastleProvider());
    AlgorithmParameterSpec specification = new OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT);
    parameters.init(specification);
    Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding", new BouncyCastleProvider());
    cipher.init(Cipher.ENCRYPT_MODE, getPublicKey(publicKey), parameters);
    return cipher.doFinal(plainText.getBytes());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2021-01-21
    • 2019-11-04
    • 2019-07-01
    • 2017-04-12
    • 2017-05-14
    相关资源
    最近更新 更多