gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:15:25 24 4
gpt4 key购买 nike

我在从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com