从512位字符串中创建公钥

问题描述 投票:2回答:1

我调用API,返回2个公钥(字符串),每个公钥由512bits组成。

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.IOException: DerInputStream.getLength(): lengthTag=79, too big.

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

这个publicKeys应该是正确的(我被保证API返回正确的密钥)

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

我很感激所有的帮助或提示!我调用API,返回2个公钥(作为字符串),每个公钥由512个字节组成。

java security cryptography public-key-encryption
1个回答
2
投票

你正试图对一个十六进制编码的字符串进行Base64解码。相反,你需要将十六进制值解码为 byte[]. 你看一下 到此 来了解如何。

然而与RSA签约是用 私人 钥匙。我不知道你打算如何使用两个公钥来签署一些东西。你可以检查 RSA签名验证是如何工作的?也许我理解错了什么。

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

© www.soinside.com 2019 - 2024. All rights reserved.