我正在尝试使用X509EncodedKeySpec将原始公共密钥转换为String格式的PublicKey。我是使用第三方提供商金雅拓创建的。
当我使用Java标准Java库生成公共密钥时,我会将编码后的字符串转换为PublicKey,但是当我使用Gemalto库创建公共密钥时。我正在例外。
String base64PublicKey =“ ----- BEGIN RSA公钥----- MIGJAoGBALWuuAJWAKOKWnMcbr1go52TiYGPB6wT2knLJnY840V3glq2IQ9iLQn8 STAFoNAoahfr / bsqNBGEoG1yT0wsIY1SbIjkD0I / A94jHQxwcTxXWP / mQxKg75t6 I / vJl3fSjcZgHg5JrtA + yeM5uCfHETbICBK4N54lxCzv0JaYgVk1AgMBAAE = -----结束RSA公钥----- “
删除第一行和最后一行
base64PublicKey = base64PublicKey.replaceAll(“ \ n”,“”).replace(“ ----- BEGIN RSA PUBLIC KEY -----”,“”).replace(“ ----- END RSA公钥-----“,”“);
此行编码后的公钥将如下所示:
MIGJAoGBALWuuAJWAKOKWnMcbr1go52TiYGPB6wT2knLJnY840V3glq2IQ9iLQn8STAFoNAoahfr / bsqNBGEoG1yT0wsIY1SbIjkD0I / A94jHQxwcTxXWP / mQxKg75t6I / vJl3fSjcZgHg5JrtA + yeM5uCfHETbICBK4N54lxCzv0JaYgVk1AgMBAAE =
X509EncodedKeySpec keySpec =新的X509EncodedKeySpec(Base64.getDecoder()。decode(base64PublicKey)); KeyFactory keyFactory = KeyFactory.getInstance(“ RSA”) PublicKey publicKey = keyFactory.generatePublic(keySpec);
我应该能够获得PublicKey。但我得到以下例外: java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:IOException:解析错误,不是序列 在sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:205) 在java.security.KeyFactory.generatePublic(KeyFactory.java:334)