在不使用 AWS 开发工具包或 CLI 工具的情况下使用 AWS KMS Public 密钥进行加密
Encrypt with a AWS KMS Public Key without using an AWS SDK or CLI tool
我已经通过 KMS CMK SDK 生成了一个 Public-私有对,并且我检索到了 public 密钥。我正在寻找一种使用此 public 密钥加密数据的方法,而无需使用 KMS SDK 或与亚马逊相关的任何东西。然后我会再次使用 KMS API 继续解密。
问题是客户不希望与任何 AWS 相关软件集成。
另一个重点是我确实想在本地存储我的私钥,也不想访问它们。我正在使用 aws CMK keyId 来执行加密和解密。
用于生成对的算法是:RSAES_OAEP_SHA_256
关键规范是:RSA_4096
我正在使用 Java,我正在寻找 java 安全包的解决方案。
非常感谢任何帮助,如果需要更多详细信息,我会修改我的问题。
我成功地使用 RSAES_OAEP_SHA_256 算法加密 Java 并使用 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());
}
我已经通过 KMS CMK SDK 生成了一个 Public-私有对,并且我检索到了 public 密钥。我正在寻找一种使用此 public 密钥加密数据的方法,而无需使用 KMS SDK 或与亚马逊相关的任何东西。然后我会再次使用 KMS API 继续解密。
问题是客户不希望与任何 AWS 相关软件集成。
另一个重点是我确实想在本地存储我的私钥,也不想访问它们。我正在使用 aws CMK keyId 来执行加密和解密。
用于生成对的算法是:RSAES_OAEP_SHA_256 关键规范是:RSA_4096
我正在使用 Java,我正在寻找 java 安全包的解决方案。
非常感谢任何帮助,如果需要更多详细信息,我会修改我的问题。
我成功地使用 RSAES_OAEP_SHA_256 算法加密 Java 并使用 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());
}