将字节数组转换为PublicKey java

时间:2016-04-14 17:38:41

标签: java public-key

尝试将byte []数组转换为PublicKey时,我收到错误:

  

线程中的异常" main" java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:IOException:DER八位字符串的简短读取       at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source)       在java.security.KeyFactory.generatePublic(未知来源)

这是给我这个错误的代码的一部分:

byte[] publicKeyBytes = keystring.getBytes();
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes);
PublicKey publicKey2 = keyFactory.generatePublic(publicKeySpec);

之前检查过,我从字符串获取的byte []数组与原始数组相同。 感谢

1 个答案:

答案 0 :(得分:0)

根据您的评论,您使用默认编码将编码公钥的字节直接转换为String,这肯定会删除/替换一些字节。请参阅JavaDoc以了解new String(bytes[])

因此pair.getPublic().getEncoded()keystring.getBytes()的内容不会相同。

使用合适的传输编码,例如Base64。在Java 8上,您可以使用java.util.Base64,在较旧的平台上可以使用Apache Commons Codec's Base64类。