本文主要是介绍OPENSSL中RSA私钥文件(PEM格式)解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在PKCS#1 RSA算法标准中定义RSA私钥语法为:
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
类型RSAPrivateKey 的各域具有以下意义:
• version 是版本号,为了与本文档的今后版本兼容。本篇文档的这个版本号应该是0,如果使用了多素数,则版本号应该是1。
Version ::= INTEGER { two-prime(0), multi(1) }
(CONSTRAINED BY {-- version must be multi if otherPrimeInfos present --})
• modulus 是RSA合数模n。
• publicExponent 是RSA的公开幂e。
• privateExponent 是RSA的私有幂d。
• prime1 是n的素数因子p。
• prime2 i是n的素数因子q。
• exponent1 等于d mod (p − 1)。
• exponent2 等于d mod (q − 1)。
• coefficient 是CRT系数 q–1 mod p。
• otherPrimeInfos 按顺序包含了其它素数r3, …, ru的信息。如果version是0 ,它应该被忽略;而如果version是1,它应该至少包含OtherPrimeInfo的一个实例。
OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo
OtherPrimeInfo ::= SEQUENCE {
prime INTEGER, -- ri
exponent INTEGER, -- di
coefficient INTEGER -- ti
}
OtherPrimeInfo的各域具有以下意义:
• prime 是n的一个素数因子ri ,其中i ≥ 3。
• exponent 是di = d mod (ri − 1)。
• coefficient 是CRT系数 ti = (r1 · r2 · … · ri–1)–1 mod ri。
公钥语法为:
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
类型RSAPublicKey的域具有以下意义:
• modulus 是RSA的合数模n。
• publicExponent 是RSA公开幂e。
在OpenSSL中生成RSA私钥公钥文件并解析
OpenSSL中RSA私钥文件生成命令为:
生成RSA公钥命令为:
生成的私钥pem文件内容如下:
MIICXAIBAAKBgQDnsN1F66mF
HrKyF7sQ/RNw6tibM90iM6VOA14305umP
O52E+3r5jyDQicdRl6lIhLigNADXP
AoGABVTIgqddiztL4Yp7ms02
HAELYubam8LcduMU8+vmlPiufoK9fo47fLsX1PFCY9
gCo4r3PMub/snq7n+skrbarZbX1J6Q1o5UYKFIrrI
W+JXg10kz/ayYn3irxZmp5ngc+b9WZfSOPehZBsLWsIb1eC7y9
0tvqJMUFAkEA8wlj3B3zK20p
jruGVQDb7V2pW9HeG5PgDB3v
eYbjA7c19UmpBw4aOrwfHhMd
XFg4iuGvVeoi9sSwvEs5sTP1
rj8O+5ooR+hHEoulLQJBAOtaMvMWIOG7mA
kLVCx1XA3MlN+u5gn7osUHMbah0Ze3uakSZ6z
-----END RSA PRIVATE KEY-----
此时文件为BASE64编码,在openssl中执行以下命令,将BASE64编码的文件装换成二进制编码:
生成的private.pem 文件为BASE64解码后的文件,此文件是将RSA密钥语法中的结构进行DER
编码后的二进制表现形式。对其进行解析,解析结果如下:
标签头
020100
028181
00e7b0dd45eba985ea1eb2fd
031eb2b217bb10fd1370ead8
ef84949b9f1a3bd4fe0adeeb
dc1fad1ac2cb0e304c731985
0203
010001
028180
0554c882a75d8b3b4be18a7b
0665ce3b458eaa841c010b62
4263d4c328bd5d1656600409
6d7d49e90d68e5460a148aeb
0241
00f40c8cc874c39b3d452e5b
a1641b0b5ac21bd5e0bbcbd0
0241
00f30963dc1df32b6d292be1
99974d8ebb865500dbed5da9
0240
62290a17369fd6b8f6328752
131dad9b7ba7a68716020ca6
0240
3ce3565c58388ae1af55ea22
7ea194a7d090cd454c239201
0241
00eb5a32f31620e1bb980467
55c0dcc94dfaee609fba2c50
也可以直接使用OpenSSL命令以明文形式输出密钥的各个参数值,例如:
然后就可以在private.txt文件中查看RSA密钥中各个参数的值
这篇关于OPENSSL中RSA私钥文件(PEM格式)解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!