将字节数组转换为 PublicKey 时出错 java

Error converting byte array to PublicKey java

尝试将 byte[] 数组转换为 PublicKey 时出现错误:

Exception in thread "main" java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: short read of DER octet string at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source) at java.security.KeyFactory.generatePublic(Unknown Source)

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

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

之前检查过,我从字符串中得到的byte[]数组与原来的数组是一样的。 谢谢

根据您的评论,您使用默认编码将编码 public 密钥的字节直接转换为 String,这肯定会 drop/replace 一些字节。请参阅 new String(bytes[]).

的 JavaDoc

所以pair.getPublic().getEncoded()keystring.getBytes()的内容不会一样。

使用合适的传输编码,比如Base64. On Java 8, you can use java.util.Base64 for that, on older platforms the Apache Commons Codec's Base64 class都可以使用。