gpt4 book ai didi

java - 公钥与 PublicKey.getEncoded() 相同

转载 作者:行者123 更新时间:2023-11-30 09:10:43 25 4
gpt4 key购买 nike

我想从 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 版本提供正确的代码吗?

最佳答案

In OpenSSL output there are much more parameters and bit string. It seems like in OpenSSL version all this parameters described by curve type are provided but why? If we know curve type we know this parameters so the only thing output must provide is curve type (second Object ID).

您没有使用命名曲线。要使用命名曲线,您需要设置 OPENSSL_EC_NAMED_CURVE 标志:

EC_KEY* key = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
EC_KEY_set_asn1_flag(key, OPENSSL_EC_NAMED_CURVE);

这将使用像 ASN1 OID: prime256v1 这样的命名曲线,而不是域参数。

参见 ECDH and Named Curves进行更详细的讨论。

关于java - 公钥与 PublicKey.getEncoded() 相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22425188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com