gpt4 book ai didi

java - 从 512 位字符串创建 PublicKey

转载 作者:行者123 更新时间:2023-12-04 09:40:57 25 4
gpt4 key购买 nike

我调用返回 2 个公钥(作为字符串)的 API,每个公钥由 512 位组成:

588506d0c604d8270ac4de9fdc520abe4779128ff5b7940d38fcd13d5e5fd07f

455c2c7b4e4a873c40f46b8e2bdfd90214591c3110b3c7ab7458818af3c59649

我需要做的是创建 PublicKey来自他们的对象以便签署数据。 (每个键对应不同的数据)

但是,我正在尝试做的事情会引发错误:
KeyFactory kf = KeyFactory.getInstance("RSA");
X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyContent));
RSAPublicKey pubKey = (RSAPublicKey) kf.generatePublic(keySpecX509);

错误是:

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: DerInputStream.getLength(): lengthTag=79, too big.



(每个键在 eror 中都有不同的“lengthTag”)

这个 publicKeys 应该是正确的(我确信 API 返回正确的 key )

我是不是误会了什么?我做错了吗?我无法弄清楚,搜索谷歌的深度显示了我使用的相同方法。

我感谢所有帮助或提示!

最佳答案

您正在尝试 Base64 解码十六进制编码的字符串。相反,您需要将十六进制值解码为 byte[] .看看at this answer了解如何。

但是使用 RSA 签名是通过 完成的。私有(private) key 。我不确定您打算如何使用两个公钥来签名。您可以查看How does RSA signature verification work? ,也许我误解了什么。

此外,您有两个由 API 返回的 64 个字符的字符串。假设它们是十六进制编码的,它们中的每一个都将转换为 32 字节或 256 位。您的帖子标题提到了 512 位,因此看起来这些可能是单个 key 的两半……您尝试做的事情有问题。

关于java - 从 512 位字符串创建 PublicKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62330734/

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