问题描述
我通过 KMS CMK SDK 生成了一个公私对,并检索了公钥。我正在寻找一种使用此公钥加密数据的方法,而无需使用 KMS SDK 或与亚马逊相关的任何内容。然后我会再次使用 KMS API 进行解密。
问题在于客户不希望与任何 AWS 相关软件集成。
另一个重要的点是,我确实想在本地存储我的私钥,也不想访问它们。我正在使用 aws CMK keyId 来执行加密和解密。
用于生成对的算法是:RSAES_OAEP_SHA_256 关键规范是:RSA_4096
我正在使用 Java,我正在寻找带有 Java 安全包的解决方案。
非常感谢任何帮助,如果需要更多详细信息,我会修改我的问题。
解决方法
我设法在普通 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());
}