您好,我正在编写一个程序,该程序从.pem文件导入私钥,并创建一个私钥对象供以后使用。我所面临的问题是一些pem文件的头文件以
-----BEGIN PRIVATE KEY-----而其他人则是从
-----BEGIN RSA PRIVATE KEY-----通过我的搜索,我知道第一个是PKCS#8格式的,但我不知道另一个属于什么格式。
发布于 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 KEY为PKCS#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可选}
发布于 2013-11-19 15:25:19
看看吧。它给出了可能的开始标记。
复制上述链接中的内容以供快速参考:
#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"https://stackoverflow.com/questions/20065304
复制相似问题