到目前为止,我已经设法在充气城堡的轻量级 API 中生成了一个 ECDHE 对。但是,我在尝试从字节 [] 重新创建公钥时遇到问题。
由于 ECPublicKeyParameters 对象只有一种方法 getQ() 我假设这就是重建 key 所需的全部内容。其他参数,如使用的曲线 (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() 的情况下获取字节的方法。
我的问题是如何使用充气城堡的轻量级 API 将 byte[] 重构为 ECPoint 对象。或者,更好的是,如何使用从原始 pubKey 对象以某种方式派生的字节数组重建整个 ECPublicKeyParameter 对象。
最佳答案
对于它可能关心的任何人,我通过使用 PublicKeyFactory 和 SubjectPublicKeyInfoFactory 对 key 进行编码和解码来解决这个问题。
使用:
byte[] key = SubjectPublicKeyInfoFactory.createSubjectPublicKeyInfo(pubKey).getEncoded();
我能够获得 key 的原始字节。
并使用:
ECPublicKeyParameters bpubKey = (ECPublicKeyParameters)PublicKeyFactory.createKey(key);
我能够重新创建公钥。