java - 从 Bouncy CaSTLe 中的 byte[] 获取 ECPoint/ECPublicKeyParameters

标签 java bouncycastle public-key-encryption elliptic-curve diffie-hellman

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

由于 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);

我能够重新创建公钥。

关于java - 从 Bouncy CaSTLe 中的 byte[] 获取 ECPoint/ECPublicKeyParameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19605954/

相关文章:

Windows 上带有 libvirt 的 Java 客户端

Java 到 Python RSA

python - 使用 pynacl 使用一个文件加密并使用第二个文件解密

javascript - Curve25519 的 JavaScript 实现?

java - 类路径元素不是 jar

java - Java 何时以及为何在没有编译器或运行时错误的情况下读取未初始化的最终静态变量?

java - Runtime类中的内存方法是什么意思?

java - 如何允许使用用户在证书级别充当另一个用户

java - 如何在c#中复制java加密

android - 如何将 android PublicKey 转换为字符串并返回?