java - 无法在java中从xml创建公钥对象

标签 java xml security digital-signature public-key

我在从 java 中的 xml 文件转换我的公钥时遇到问题。经过一些研究,X509 编码似乎是最流行的格式。

我有一个如下所示的 xml 文件:

<RSAKeyValue>
<Modulus>hkjhvgkjewrlhfelwrkjvhwerkjlrkwjvbrvkjrbvkwjlvbwekvjbekvbwkbrkvbwrwebrvvbrlkvbklvrbkvlreb</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>

(这不是我的实际键值)

这是我尝试过的代码示例:

 File fXmlFile = new File(".....\\...\\...\\file.xml"); //Path to xml file
 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
 DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
 Document doc = dBuilder.parse(fXmlFile);
 doc.getDocumentElement().normalize();

 NodeList nList = doc.getElementsByTagName("Modulus");
 Node n = nList.item(0);

 byte[] encKey = Base64.getEncoder().encode(n.getTextContent().getBytes());

 X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);
 KeyFactory keyFactory = KeyFactory.getInstance("DSA", "SUN");
 PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);

在最后一行,我得到一个如下所示的异常:

java.security.spec.InvalidKeySpecException: Inappropriate key specification: invalid key format
at sun.security.provider.DSAKeyFactory.engineGeneratePublic(DSAKeyFactory.java:119)
at java.security.KeyFactory.generatePublic(KeyFactory.java:328)
at XmlReader.main(XmlReader.java:41)

我不确定 key 格式有什么问题。是否是输入转换为字符串时出现问题导致丢失了 key 的一些重要数据?

最佳答案

您正在使用 DSA KeyFactory 构建 RSA key ,并使用 X509EncodedKeySpec,同时您具有以 Base64 编码的模数和指数

试试这个:

BigInteger modulus = new BigInteger(Base64.getDecoder().decode(modulusAsString));
BigInteger exponent =  new BigInteger(Base64.getDecoder().decode(exponentAsString));

RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, exponent);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey =keyFactory.generatePublic(keySpec);

我省略了 XML 部分

关于java - 无法在java中从xml创建公钥对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46220932/

相关文章:

c# - 检查 Xml 节点是否有属性

security - Elixir 分布式安全和白名单允许的节点

java - 如何使用 messages.properties 文件向 SWT 对话框添加键盘快捷键?

java - JUnit:setUp 和tearDown 方法未按预期工作

Java ArrayBlockingQueue 设计

java - 定义一个并发哈希集spring bean?

Java Californium CoAP 服务器

Java:连接两个 XML NodeList

.net - cert 和 mozroots 的 Mono 问题

java - 使用 protected 文件授予 word 权限