我已经通过KMS CMK SDK生成了一个公共-私有对,并检索了公钥。我正在寻找一种方法,在不使用KMS SDK或任何与亚马逊相关的东西的情况下,用这个公钥加密数据。然后我将再次使用KMS API进行解密。
问题是客户不希望与任何AWS相关软件集成。
另一个重要的点是,我确实想在本地存储我的私钥,也不想访问它们。我使用aws CMK密钥ID来执行加密和解密。
用于生成对的算法为: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());
}