RSA公鑰文件(PEM)解析

參考鏈接:OPENSSL中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—–

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章