1

EC_POINT_point2oct(ecGroup,EC_KEY_get0_public_key(key),POINT_CONVERSION_COMPRESSED,_pub._key,sizeof(_pub._key),0)

它不会是 DER、PKCS* 或任何 ASN.1 之类的高级别的东西。(会吗?)我猜是一个包含 EC 压缩点的原始 BN。

我很好奇这个结果是否可以移植到其他语言,例如使用 BouncyCastle 的 EC 类的 Java。

4

2 回答 2

2

如果您足够深入地浏览源代码,您将看到如下语句:

ret = (form == POINT_CONVERSION_COMPRESSED) ? 1 + field_len : 1 + 2*field_len;

所以它不应该像你预期的那样应用任何额外的编码。当然,这也很容易尝试。

返回压缩点应该不会太难。取回价值比较棘手,并且可能会给您带来软件专利方面的麻烦

于 2013-07-29T17:36:29.237 回答
2

它似乎只是采用 ANSI X9.62 格式,这是非常标准的,是的,例如用于对 TLS 握手中的 EC 点进行编码。

特别是,BouncyCastle 的 EC 类可以读取它们,支持未压缩、压缩和混合编码(基本上所有内容)。在轻量级 API 中,如果您有 org.bouncycastle.math.ec.ECCurve 的实例,您可以在编码上调用 ECCurve.decodePoint 以获取曲线上的 ECPoint。然后可以使用 ECPoint 实例创建公钥/私钥。

如果您通过 JCE 使用 BC(或我期望的大多数其他提供商),我相信通过该 API 也可以直接解码它们。

于 2013-08-02T12:46:49.317 回答