4

到目前为止,我已经成功地在 bouncy castle 的轻量级 API 中生成了一对 ECDHE。但是,我在尝试从字节 [] 重新创建公钥时遇到问题。

由于 ECPublicKeyParameters 对象只有一个方法 getQ() 我假设这就是重建密钥所需的全部内容。其他参数,例如使用的曲线 (P-521) 保持不变。

我正在执行以下操作:

AsymmetricCipherKeyPair kp = kpgen.generateKeyPair(); //ECDHE Key Generator

ECPublicKeyParameters pubKey = (ECPublicKeyParameters)kp.getPublic();
byte[] aPubKeybytes = pubKey.getQ().getEncoded(false); //Should I set to true or false?

除非有另一种方法来获取公钥 pubKey 的原始字节,否则我看不到在不调用返回 ECPoint 对象的方法 getQ() 的情况下获取字节的方法。

我的问题是如何使用 bouncy castle 的轻量级 API 将 byte[] 重建为 ECPoint 对象。或者,更好的是,如何使用从原始 pubKey 对象派生的字节数组重建整个 ECPublicKeyParameter 对象。

4

1 回答 1

9

对于它可能关心的任何人,我通过使用 PublicKeyFactory 和 SubjectPublicKeyInfoFactory 对密钥进行编码和解码来解决这个问题。

使用:

byte[] key = SubjectPublicKeyInfoFactory.createSubjectPublicKeyInfo(pubKey).getEncoded();

我能够获得密钥的原始字节。

并使用:

ECPublicKeyParameters bpubKey = (ECPublicKeyParameters)PublicKeyFactory.createKey(key);

我能够重新创建公钥。

于 2013-10-27T05:15:54.383 回答