Fawzinov:
私は以下の形式で自分の公開鍵を取得し、私は、このキーを使用して、いくつかのデータを暗号化するためにJavaを使用する必要があります
----- BEGIN RSA公開鍵----- MIGJAoGBAKDZp / 3e4w1nJA / ImDMgaGowWfTnhlFkrvS86LBc6wh1 / zBRt51 / 2F / O / ZzaA5mZ nx5YMlhDOf3vHyzyO4KzYlG8md3RQU7eKQQDxgRfW1v0f7WVQoC2Dxbupyz0JVV4jQStYUYW ifGsh76wI3rkzlq3F2Ea / + jqMxX / AZOO30tBAgMBAAE = ----- END RSA公開鍵-----
michalk:
あなたは使用することができ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-jdk15on
とbcprov-jdk15on
。