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

标签 java public-key

在尝试将 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/

相关文章:

java - For-Each 循环不兼容类型

Java注释单独获取声明的方法

java - 关于使用Apache ant的两个问题

java - 从 (RSA) PublicKey 手动创建 JWK

c# - Windows 中公钥和私钥容器的位置?

java - 使用 Java 从 Keystore 中导入的证书获取公钥

java - 带有弹出登录模式的自定义登录页面 Spring Security

java - 我不明白如何解决语法错误

c - 加载公钥以创建用于公共(public)加密的 rsa 对象

cryptography - RSA算法计算器