Java中如何将Base64编码的RSA公钥字符串转回PublicKey?
将Base64编码的公钥字符串转回PublicKey对象
很简单,咱们把之前的编码流程倒过来走一遍就行,结合你用BouncyCastle的代码风格,给你整理了完整的实现:
核心步骤其实就是编码的逆操作:
- 把Base64字符串解码回原始字节数组
- 用
X509EncodedKeySpec包装这个字节数组(因为你之前调用pub.getEncoded()得到的就是X.509格式的公钥编码) - 再通过和之前一致的
KeyFactory生成PublicKey对象
直接上可用的代码:
PublicKey convertBase64ToPublicKey(String base64EncodedPubKey) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException { // 1. 解码Base64字符串到原始字节数组 byte[] pubKeyBytes = Base64.getDecoder().decode(base64EncodedPubKey); // 2. 创建符合X509规范的密钥规格对象 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(pubKeyBytes); // 3. 使用和生成时一致的KeyFactory(RSA算法 + BC提供者)生成公钥 KeyFactory factory = KeyFactory.getInstance("RSA", "BC"); return factory.generatePublic(keySpec); }
几个需要注意的细节:
- 确保你的项目里已经引入了BouncyCastle的依赖,不然
"BC"提供者会找不到导致报错 - 如果你的Base64字符串里带有
-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----这类头尾标记,要先把它们去掉再解码(不过看你之前的代码逻辑,生成的Base64应该是纯编码内容,没有这些额外标记,直接解码即可) - 异常处理可以根据你的业务需求调整,比如替换成自定义异常或者更友好的错误提示
内容的提问来源于stack exchange,提问作者Questioner
相关产品推荐
相关产品推荐

