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

问题描述

openssl 函数 - d2i_PublicKeyd2i_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,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

不清楚如何解释上述信息以帮助了解持续存在的问题。

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)