首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BEGIN RSA PRIVATE KEY与BEGIN PRIVATE KEY的区别

BEGIN RSA PRIVATE KEY与BEGIN PRIVATE KEY的区别
EN

Stack Overflow用户
提问于 2013-11-19 15:08:02
回答 2查看 185.4K关注 0票数 195

您好,我正在编写一个程序,该程序从.pem文件导入私钥,并创建一个私钥对象供以后使用。我所面临的问题是一些pem文件的头文件以

代码语言:javascript
复制
-----BEGIN PRIVATE KEY-----

而其他人则是从

代码语言:javascript
复制
-----BEGIN RSA PRIVATE KEY-----

通过我的搜索,我知道第一个是PKCS#8格式的,但我不知道另一个属于什么格式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-19 15:23:21

请参阅https://polarssl.org/kb/cryptography/asn1-key-structures-in-der-and-pem (在页面中搜索"BEGIN RSA PRIVATE KEY") (archive link以获取后继内容,以防万一)。

BEGIN RSA PRIVATE KEY是PKCS#1,它只是一个RSA密钥。它本质上只是来自PKCS#8的键对象,但前面没有版本或算法标识符。BEGIN PRIVATE KEY为PKCS#8,表示密钥类型包含在密钥数据本身中。从链接:

未加密的PKCS#8编码数据以标签开头和结尾:

-开始私钥- BASE64编码数据-结束私钥

在base64编码的数据中,存在以下DER结构:

PrivateKeyInfo ::= SEQUENCE {版本版本,算法AlgorithmIdentifier,PrivateKey位串} AlgorithmIdentifier ::= SEQUENCE {算法对象标识符,任意由算法定义的参数可选}

因此,对于RSA私钥,OID是1.2.840.113549.1.1.1,PrivateKey密钥数据位串有一个RSAPrivateKey。

BEGIN RSA PRIVATE KEY相反,它总是指定一个RSA密钥,因此不包括密钥类型OID。BEGIN RSA PRIVATE KEYPKCS#1

RSA私钥文件(PKCS#1)

RSA私钥PEM文件特定于RSA密钥。

它以标签开头和结尾:

-BEGIN RSA私钥- BASE64编码数据-END RSA私钥

在base64编码的数据中,存在以下DER结构:

RSAPrivateKey ::= SEQUENCE {版本,模数整数,-- n publicExponent整数,-- e privateExponent整数,-- d prime1整数,-- p prime2整数,-- q exponent1整数,-- d mod (p-1) exponent2整数,-- d mod (q-1)系数整数,-- (q的逆) mod p otherPrimeInfos OtherPrimeInfos可选}

票数 227
EN

Stack Overflow用户

发布于 2013-11-19 15:25:19

看看吧。它给出了可能的开始标记。

复制上述链接中的内容以供快速参考:

代码语言:javascript
复制
#define PEM_STRING_X509_OLD "X509 CERTIFICATE"
#define PEM_STRING_X509     "CERTIFICATE"
#define PEM_STRING_X509_PAIR    "CERTIFICATE PAIR"
#define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE"
#define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST"
#define PEM_STRING_X509_REQ "CERTIFICATE REQUEST"
#define PEM_STRING_X509_CRL "X509 CRL"
#define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY"
#define PEM_STRING_PUBLIC   "PUBLIC KEY"
#define PEM_STRING_RSA      "RSA PRIVATE KEY"
#define PEM_STRING_RSA_PUBLIC   "RSA PUBLIC KEY"
#define PEM_STRING_DSA      "DSA PRIVATE KEY"
#define PEM_STRING_DSA_PUBLIC   "DSA PUBLIC KEY"
#define PEM_STRING_PKCS7    "PKCS7"
#define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA"
#define PEM_STRING_PKCS8    "ENCRYPTED PRIVATE KEY"
#define PEM_STRING_PKCS8INF "PRIVATE KEY"
#define PEM_STRING_DHPARAMS "DH PARAMETERS"
#define PEM_STRING_DHXPARAMS    "X9.42 DH PARAMETERS"
#define PEM_STRING_SSL_SESSION  "SSL SESSION PARAMETERS"
#define PEM_STRING_DSAPARAMS    "DSA PARAMETERS"
#define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY"
#define PEM_STRING_ECPARAMETERS "EC PARAMETERS"
#define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
#define PEM_STRING_PARAMETERS   "PARAMETERS"
#define PEM_STRING_CMS      "CMS"
票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20065304

复制
相关文章

相似问题

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