将字节数组转换为 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都可以使用。
尝试将 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[])
.
所以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都可以使用。