java - 从 PKCS1 密钥获取 RSA 公钥
问题描述
我以以下格式获取我的公钥,我需要使用 java 使用此密钥加密一些数据
-----BEGIN RSA PUBLIC KEY----- MIGJAoGBAKDZp/3e4w1nJA/ImDMgaGowWfTnhlFkrvS86LBc6wh1/zBRt51/2F/o/ZzaA5mZ nx5YMlhDOf3vHyzyO4KzYlG8md3RQU7eKQQDxgRfW1v0f7WVQoC2Dxbupyz0JVV4jQStYUYW ifGsh76wI3rkzlq3F2Ea/+jqMxX/AZOO30tBAgMBAAE= -----END RSA PUBLIC KEY-----
解决方案
您可以使用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
。
推荐阅读
- c++ - 如何在 C++ 中使用 cv::cuda::cvtColor()?
- python - Alpha Vantage 传递多个查询 - 全球报价
- javascript - 单击导航栏项目时如何下划线?
- php - 即使在 php.ini 中安装和启用 PDO 也未找到错误
- java - 没有静态方法元工厂
- git-lfs - 在本地禁用 git LFS Locking api,因为它超慢?
- reactjs - 选中列表中的复选框不会在 React 中再次呈现
- sql - 选择在某一天访问过所有课程的所有成员
- python - 重新安装python后pip不起作用是什么原因?
- node.js - 必须将哪些请求标头发送到服务器才能为您提供非缓存响应