Exception in thread "main" java.security.spec.InvalidKeySpecException: Only RSAPublicKeySpec and X509EncodedKeySpec supported for RSA public keys
时间: 2024-02-20 16:59:53 浏览: 137
前端使用jsencrypt加密后端使用java RSA解密功能实现源码
4星 · 用户满意度95%
这个异常的原因是你使用的是PKCS8EncodedKeySpec来生成RSA公钥,但是PKCS8EncodedKeySpec是用来生成RSA私钥的。
如果你想要使用PKCS#8格式的公钥,可以将公钥转换成X.509格式的公钥,然后使用X509EncodedKeySpec来生成公钥。
以下是使用X509EncodedKeySpec来生成RSA公钥的示例代码:
```java
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
public class RSAUtil {
public static PublicKey getPublicKey(String publicKeyStr) throws Exception {
byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyStr);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(keySpec);
}
}
```
示例代码中,使用Base64解码字符串形式的公钥,然后将其转换成X.509格式的公钥,最后使用KeyFactory生成公钥对象。
阅读全文