首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“传统私钥格式”与PKCS8

“传统私钥格式”与PKCS8
EN

Stack Overflow用户
提问于 2018-12-03 20:11:04
回答 1查看 2.9K关注 0票数 2

PEM_write_PrivateKey的手册页声明它使用传统的私钥格式写入私钥。

这与PKCS8和PKCS1有什么关系?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-03 22:32:43

您所指的文档似乎不再准确(不再)。目前,PEM_write_PrivateKey()对RSA、DSA和EC密钥的OpenSSL实现做的事情与PEM_write_PKCS8PrivateKey()相同。

与OpenSSL的情况一样,源代码是获取信息的更可靠的方法。看看PEM_write_bio_PrivateKey(),它应该根据文档给出“传统”格式,我们看到:

代码语言:javascript
复制
int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
                             unsigned char *kstr, int klen,
                             pem_password_cb *cb, void *u)
{
    if (x->ameth == NULL || x->ameth->priv_encode != NULL)
        return PEM_write_bio_PKCS8PrivateKey(bp, x, enc,
                                             (char *)kstr, klen, cb, u);
    return PEM_write_bio_PrivateKey_traditional(bp, x, enc, kstr, klen, cb, u);
}

实际上,这里提到了一个传统的私钥写入函数,但前提是priv_encode方法不是针对该特定密钥类型实现的。但它实际上是为标准密钥类型实现的。对于1.0.2g (您根据下面的注释使用的版本),您可以在这里看到相关的函数:rsa_priv_encode()dsa_priv_encode()eckey_priv_encode()。PKCS#8是编写私钥时的标准格式。

PKCS#8能够捕获多种类型的密钥。其格式包括以加密形式存储私钥的选项。这与使用较弱的加密模式在PEM级别进行密钥加密的旧格式不同。请参阅对SO问题用OpenSSL API读取公钥的密码回调的回答,以获得更详细的关于RSA的解释,并将其与PKCS#1进行比较。

问题中的“传统”密钥格式指的是非PKCS#8密钥格式,这是RSA和EC密钥的标准格式,以及针对DSA的OpenSSL专用密钥格式,但并不统一。对于RSA密钥,这恰好是一种格式,通常被称为PKCS#1格式。有关更多信息,请参见对SO问题RSA私钥的PKCS#1和PKCS#8格式的回答。

如果您想要以“传统”格式编写,则必须显式调用相关函数,例如RSAPrivateKey()。在这种情况下,文档看起来确实是准确的(除了语法错误:- ):

RSAPrivateKey函数使用RSA结构处理RSA私钥。写入例程使用传统格式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53601150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档