从 512 位字符串创建公钥



我调用返回 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, 太大了.

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

这个公钥应该是正确的(我确信 API 返回正确的密钥)

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

我感谢所有的帮助或提示!

您正在尝试 Base64 解码十六进制编码的字符串。相反,您需要解码十六进制值以byte[]。看看这个答案就知道怎么做。

但是,使用RSA 进行签名是使用私钥完成的。我不确定您打算如何使用两个公钥来签名。您可以查看RSA签名验证如何工作?,也许我误解了什么。

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

相关内容

  • 没有找到相关文章

最新更新