尝试将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 []数组与原始数组相同。 感谢
答案 0 :(得分:0)
根据您的评论,您使用默认编码将编码公钥的字节直接转换为String
,这肯定会删除/替换一些字节。请参阅JavaDoc以了解new String(bytes[])
。
因此pair.getPublic().getEncoded()
和keystring.getBytes()
的内容不会相同。
使用合适的传输编码,例如Base64。在Java 8上,您可以使用java.util.Base64
,在较旧的平台上可以使用Apache Commons Codec's Base64
类。