openssl 函数 - d2i_PublicKey 和 d2i_PUBKEY 之间有什么区别以及哪些场景决定应使用哪个?

问题描述 投票:0回答:1

openssl 函数 -

d2i_PublicKey
d2i_PUBKEY
之间有什么区别以及什么场景决定应该使用哪个?

d2i_PublicKey
正在应用程序中使用,该应用程序返回有效的
EVP_PKEY
对象,直到找到返回
NULL
的特定测试用例。如果函数调用更改为
d2i_PUBKEY
,它将返回有效的
EVP_PKEY
。但它仅特定于这个测试用例,其余的测试用例与其他函数一起使用 -
d2i_PublicKey
。在决定调用哪个函数之前,似乎需要对参数进行一些初始检查/处理。有没有人以前遇到过类似的问题并可以帮助提供相关信息或代码?

Variant 1: EVP_PKEY_result_obj = d2i_PublicKey(keyType /*EVP_PKEY_RSA*/, nullptr, &publicKeyData, publicKey.size());
Variant 2: EVP_PKEY_result_obj = d2i_PUBKEY(nullptr, &publicKeyData, publicKey.size());

1.1.0 分支文档 [1] [2] 对这些功能进行了以下说明:

  1. d2i_PrivateKey()
    使用算法类型解码私钥。它尝试使用任何密钥特定格式或 PKCS#8 未加密的 PrivateKeyInfo 格式。类型参数应该是公钥算法常量,例如 EVP_PKEY_RSA。如果解码的密钥与类型不匹配,则会发生错误。 d2i_PublicKey() 对公钥执行相同的操作。

  2. d2i_PUBKEY()
    i2d_PUBKEY()
    使用SubjectPublicKeyInfo 格式对EVP_PKEY 结构进行解码和编码。否则它们遵循其他 ASN.1 函数的约定,例如 d2i_X509()。

[1] https://www.openssl.org/docs/man1.1.0/man3/d2i_PublicKey.html

[2] https://www.openssl.org/docs/man1.1.0/man3/d2i_PUBKEY.html

尚不清楚如何解释上述信息以帮助理解当前的问题。

如果需要任何其他信息来进一步了解该问题,请告诉我 - 我将在此处添加。

openssl private-key public-key
1个回答
0
投票

很晚了!但如果有人需要它,this答案会照亮它。当使用RSA加密时,则使用

d2i_PUBKEY
。更罕见类型的 PKCS1 与
d2i_PublicKey
一起使用。为了将来参考,您可以查找他们的 GitHub 文件并尝试注意那里的任何内容。

 stanxy
© www.soinside.com 2019 - 2024. All rights reserved.