1. 程式人生 > >RSA公鑰檔案(PEM)解析

RSA公鑰檔案(PEM)解析

上一篇文章RSA私鑰檔案(PEM)解析講述了RSA私鑰檔案(PEM)的生成,本文講述RSA公鑰檔案(PEM)的生成。
注: 此文公鑰與上一篇私鑰不對應。

公鑰語法為:
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, //RSA合數模n
publicExponent INTEGER //RSA公開冪e
}

本文適用範圍:已知公鑰結構各域值,組裝RSA公鑰檔案,即PEM檔案。

PEM檔案組成是TLV結構。

一、資料例項,各域值如下:

1.modulus:
AB602562101207D05A6C413E24CE42699210388F5D31D28151E0FA9141D9C8F8
AC716C0C4F449616AA2270F1007CF3BA46F05131E402266B2A628F4B70142429
93F5BC06E3C0609F9E52BE8D5D0CFACF53C2EE98533A9818828EC5CB8120A688
ADC603DBE65DF9059AD8039644897896943912D81C76856AB7E380C1530C6DE0
E155D4C9FB943967C52EB147CDBF2464AC2B631055DBE3109491A067567AE515
FD36428930FABCAC7C0FEB906C11815B6F00462E588DEB81C4364E2B62540E92
69F49487CC4F8724DDC481C5134B86108C9FACD5D7187706ACA2D3425BFE4F11
9C254273FA5C91EEA5EB06154936D27EE62266CDCAE9E34D20229360559325C7

2.publicExponent:
00000003

二、組裝PEM檔案

1.按照以上資料域順序依次組裝成TLV。
①modulus組裝
0282010100
AB602562101207D05A6C413E24CE42699210388F5D31D28151E0FA9141D9C8F8
AC716C0C4F449616AA2270F1007CF3BA46F05131E402266B2A628F4B70142429
93F5BC06E3C0609F9E52BE8D5D0CFACF53C2EE98533A9818828EC5CB8120A688
ADC603DBE65DF9059AD8039644897896943912D81C76856AB7E380C1530C6DE0
E155D4C9FB943967C52EB147CDBF2464AC2B631055DBE3109491A067567AE515
FD36428930FABCAC7C0FEB906C11815B6F00462E588DEB81C4364E2B62540E92
69F49487CC4F8724DDC481C5134B86108C9FACD5D7187706ACA2D3425BFE4F11
9C254273FA5C91EEA5EB06154936D27EE62266CDCAE9E34D20229360559325C7

說明:
02 - tag
82 - 81代表長度用1byte表示,82代表長度用2byte表示(此位元組部分tag後不存在)
0101 - length 2bytes表示
00 - 在modulus資料前新增00,原因未知,請知情道友告知。

②publicExponent組裝:
020103

說明:
02 - tag
01 - length
03 - 00000003 在公鑰組裝中,捨棄0x00;私鑰組裝中,保留0x00

2.輸出PEM檔案
①公鑰PEM檔案頭,巢狀多層TLV,本例項檔案頭為:
30820120 300d06092a864886f70d0101010500 0382010d 0030820108

說明:
30820120
30 - tag
82 - 代表length由2bytes表示
0120 - length (2bytes)

30 0d 06092a864886f70d0101010500
30 - tag
0d - length
06092a864886f70d0101010500 - value

03 82 010d
03 - tag
82 - 代表length由2bytes表示
010d - value (2bytes),代表長度

00 3082 0108
00 - 補0x00,原因未知,請知悉者不吝賜教
30 - tag
82 - 代表length由2bytes表示
0108 - value(2bytes),代表長度。

②依次輸出以上組裝後的資料到PEM檔案。

至此,PEM檔案已生成。
本文例項資料對應PEM檔案,如圖:
RSA PubKey PEM

對此PEM檔案進行Base64編碼,即得到RSA公鑰:
—–BEGIN PUBLIC KEY—–
MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAq2AlYhASB9BabEE+JM5CaZIQOI9dMdKB
UeD6kUHZyPiscWwMT0SWFqoicPEAfPO6RvBRMeQCJmsqYo9LcBQkKZP1vAbjwGCfnlK+jV0M+s9T
wu6YUzqYGIKOxcuBIKaIrcYD2+Zd+QWa2AOWRIl4lpQ5EtgcdoVqt+OAwVMMbeDhVdTJ+5Q5Z8Uu
sUfNvyRkrCtjEFXb4xCUkaBnVnrlFf02Qokw+rysfA/rkGwRgVtvAEYuWI3rgcQ2TitiVA6SafSU
h8xPhyTdxIHFE0uGEIyfrNXXGHcGrKLTQlv+TxGcJUJz+lyR7qXrBhVJNtJ+5iJmzcrp400gIpNg
VZMlxwIBAw==
—–END PUBLIC KEY—–

本文不講理論,只做例項資料展示和組裝過程。以備自己回憶使用。部分未理解或理解有誤之處,還請知悉者不吝賜教。