在尝试将 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[] 数组与原始数组相同。 谢谢
最佳答案
根据您的评论,您使用默认编码将编码公钥的字节直接转换为String
,这肯定会删除/替换一些字节。请参阅 JavaDoc new String(bytes[])
.
因此 pair.getPublic().getEncoded()
和 keystring.getBytes()
的内容不会相同。
使用合适的传输编码,例如 Base64 。在 Java 8 上,您可以使用 java.util.Base64
为此,在旧平台上 Apache Commons Codec's Base64
可以使用类。
关于java - 将字节数组转换为 PublicKey java 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36630232/