【发布时间】:2014-03-15 14:40:51
【问题描述】:
我想从 OpenSSL 获得与 Java PublicKey.getEncoded() 相同的 ASN.1 输出。我使用EC,曲线类型是prime256v1。 这是我的 OpenSSL 代码:
EC_KEY *ec_key = EVP_PKEY_get1_EC_KEY(key);
unsigned char *result = NULL;
int r = i2d_EC_PUBKEY(ec_key, &result);
Java 代码很简单:
byte[] result = keyPair.getPublicKey().getEncoded();
OpenSSL 结果包含 ASN.1 但与 Java 代码输出的格式不同。在 Java 输出中只有两个对象 ID 和位串。在 OpenSSL 输出中有更多的参数和位串。似乎在 OpenSSL 版本中提供了曲线类型描述的所有这些参数,但为什么呢?如果我们知道曲线类型,我们就知道此参数,因此输出必须提供的唯一内容是曲线类型(第二个对象 ID)。
我知道我做错了什么,请问有人可以提供 OpenSSL 版本的正确代码吗?
【问题讨论】: