从 PKCS1 密钥获取 RSA 公钥



我以以下格式获取公钥,我需要使用此密钥使用 java 加密一些数据

-----开始 RSA 公钥----- MIGJAoGBAKDZp/3e4w1nJA/ImDMgaGowWfTnhlFkrvS86LBc6wh1/zBRt51/2F/o/ZzaA5mZ nx5YMlhDOf3vHyzyO4KzYlG8md3RQU7eKQQDxgRfW1v0f7WVQoC2Dxbupyz0JVV4jQStYUYW ifGsh76wI3rkzlq3F2Ea/+jqMxX/AZOO30tBAgMBAAE= -----结束 RSA 公钥

-----

您可以使用BouncyCastle库来实现此目的。您的密钥在 PEM fromat 中。要阅读它,您可以使用PEMParser

private static PublicKey readPublicKey(String path) throws InvalidKeySpecException, NoSuchAlgorithmException, IOException {
PEMParser pemParser = new PEMParser(new FileReader(path));
Object object = pemParser.readObject();
SubjectPublicKeyInfo subjectPublicKeyInfo = (SubjectPublicKeyInfo) object;
RSAKeyParameters rsa = (RSAKeyParameters) PublicKeyFactory.createKey(subjectPublicKeyInfo);
RSAPublicKeySpec rsaSpec = new RSAPublicKeySpec(rsa.getModulus(), rsa.getExponent());
KeyFactory kf = KeyFactory.getInstance("RSA", new BouncyCastleProvider());
return kf.generatePublic(rsaSpec);
}

然后用这个密钥加密:

PublicKey publicKey = readPublicKey("src/main/resources/key.pem");
String dataToEncrypt = "myMessage";
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", new BouncyCastleProvider());
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encrypted = cipher.doFinal(dataToEncrypt.getBytes(StandardCharsets.UTF_8));

测试版本:bcpkix-jdk15onbcprov-jdk15on

最新更新