从PEM文件生成RSAPublicKey时抛出InvalidKeySpecException求助
解决InvalidKeySpecException: invalid key format问题
我一眼就看出问题所在啦——你正在用RSA密钥工厂去解析一个椭圆曲线(EC)公钥文件,这两种算法完全不兼容,难怪会抛出格式错误的异常!你自己生成的是RSA密钥,所以代码能正常运行,但目标文件是EC类型的密钥,自然就适配失败了。
修复步骤
只需要把代码中密钥工厂的算法改成EC对应的即可,具体改动如下:
// 把RSA改成EC,匹配目标文件的密钥类型 KeyFactory factory = KeyFactory.getInstance("EC"); PemReader pemReader = new PemReader(new InputStreamReader(new FileInputStream(filename))); PemObject pemObject = pemReader.readPemObject(); byte[] content = pemObject.getContent(); X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(content); // 类型替换为ECPublicKey,匹配EC密钥 ECPublicKey publicKey = (ECPublicKey) factory.generatePublic(pubKeySpec);
额外说明
- 要是不确定密钥类型,可以直接打开PEM文件查看:EC公钥的头部通常是
-----BEGIN EC PUBLIC KEY-----(部分也会用通用的-----BEGIN PUBLIC KEY-----),而RSA公钥会是-----BEGIN RSA PUBLIC KEY-----或通用头部但内容为RSA格式。 X509EncodedKeySpec可以兼容多种公钥类型,核心是密钥工厂的算法必须和密钥本身的类型严格匹配。
内容的提问来源于stack exchange,提问作者vijay
相关产品推荐
相关产品推荐

