- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从 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/
我是一名优秀的程序员,十分优秀!