ASN.1 BER编码 https://blog.csdn.net/wzj_whut/article/details/86241935
pkcs-1定义
ftp://ftp.rsa.com/pub/pkcs/ascii/pkcs-1.asc
RSA规范 https://tools.ietf.org/html/rfc8017
X509公钥格式 https://tools.ietf.org/html/rfc5280
object identifier查询
http://www.oid-info.com
如果是文件格式的文件(PEM格式), 需要先使用base64解码
公钥格式
X.509中的RSA的公钥定义为
SEQUENCE {
SEQUENCE {
OBJECT IDENTIFIER
rsaEncryption (1 2 840 113549 1 1 1)
NULL
}
BIT STRING, encapsulates {
SEQUENCE {
INTEGER
INTEGER 65537
}
}
}
随机生成RSA的公钥如下 (https://github.com/wzjwhut/rsa-theory)
30 82 01 22 30 0d 06 09 2a 86 48 86 f7 0d 01 01
01 05 00 03 82 01 0f 00 30 82 01 0a 02 82 01 01
00 d7 99 7d 64 f1 5e 77 dd a9 c8 fe 3d ea ba 0f
bd 83 56 27 f5 cb 52 78 09 da 60 fb 0f 16 ef b8
3a ed 19 dd c3 73 b1 e7 52 ca d8 82 95 cc 40 df
51 0c 59 26 52 6b 96 48 88 13 0a 78 28 68 3b 00
79 e6 a2 43 36 c2 04 aa 37 b0 77 73 19 ff 33 ec
50 76 45 ad 3b 46 09 29 83 c7 1b 73 d8 f7 f8 a0
f1 e4 e4 d8 ed aa fc 74 a0 5c ce 69 c4 be a8 e7
ac b3 e2 07 9b 90 de a3 94 42 89 85 90 09 58 43
fb ef 0c 05 91 38 67 f8 e1 8d 60 a8 c4 bb 3b 1f
35 1d 6a 17 38 12 50 cf 89 6d c5 27 4a 5f 98 23
df 23 d6 41 f3 ab a2 c1 5a 0d 2f d5 92 0c 3e 93
4e ef 4e 49 7d 0d 39 99 b9 a0 24 2a ce 7b 67 15
a3 df 25 2c ed b1 19 76 e3 41 ab 7f f8 86 fb 88
ed 85 94 2a 43 0d 3f 4d 1f c0 5d e7 af 5c 18 8a
e0 99 bd de ba 78 ec 97 27 ae ca ea 75 be 5f 84
2a 9a 10 c6 fa db cd 25 11 59 2a bf 12 36 02 9c
0d 02 03 01 00 01
总共294字节, 它的格式如下
30 --表示ASN.1的SEQUENCE编码
82 01 22, --content长度为0x0122, 即290字节, 剩下的所有的数据都是content
30 --又是一个sequence
0d --长度为13字节
06 -- Object identifier
09 --长度为9个字节
2a --整数42 = 1*40 +2 , 即 {1, 2}
86 48 --整数840
86 f7 0d --整数113549
01 01 01 , --三个整数1
--因此, object id是{1 2 840 113549 1 1 1}, 官网上查到的pkcs-1的OID=1.2.840.113549.1.1.1
05 00 -- null
03 --表示bitstring
82 01 0f --长度为 271, 剩下的所有数据
00 --padding的比特数为0.
30 --sequence
82 01 0a --长度266
02 --整数
82 01 01 --长度为257, 以下是一个超级大的整数, 为密钥中的n
00 d7 99 7d 64 f1 5e 77 dd a9 c8 fe 3d ea ba 0f
bd 83 56 27 f5 cb 52 78 09 da 60 fb 0f 16 ef b8
3a ed 19 dd c3 73 b1 e7 52 ca d8 82 95 cc 40 df
51 0c 59 26 52 6b 96 48 88 13 0a 78 28 68 3b 00
79 e6 a2 43 36 c2 04 aa 37 b0 77 73 19 ff 33 ec
50 76 45 ad 3b 46 09 29 83 c7 1b 73 d8 f7 f8 a0
f1 e4 e4 d8 ed aa fc 74 a0 5c ce 69 c4 be a8 e7
ac b3 e2 07 9b 90 de a3 94 42 89 85 90 09 58 43
fb ef 0c 05 91 38 67 f8 e1 8d 60 a8 c4 bb 3b 1f
35 1d 6a 17 38 12 50 cf 89 6d c5 27 4a 5f 98 23
df 23 d6 41 f3 ab a2 c1 5a 0d 2f d5 92 0c 3e 93
4e ef 4e 49 7d 0d 39 99 b9 a0 24 2a ce 7b 67 15
a3 df 25 2c ed b1 19 76 e3 41 ab 7f f8 86 fb 88
ed 85 94 2a 43 0d 3f 4d 1f c0 5d e7 af 5c 18 8a
e0 99 bd de ba 78 ec 97 27 ae ca ea 75 be 5f 84
2a 9a 10 c6 fa db cd 25 11 59 2a bf 12 36 02 9c
0d
02 --整数
03 --就3个字节
01 00 01 --数字 65537, , 为RSA密钥中e
私钥格式
密码加密规范 https://tools.ietf.org/html/rfc8018
私钥文件格式