RSA公钥文件(PEM)解析
RSAPublicKey ::= SEQUENCE {?
modulus INTEGER, //RSA合數模n?
publicExponent INTEGER //RSA公開冪e?
}
說明:
1.此語法中的modulus和publicExponent,提取自對應私鑰中的同名域值。
2.PKCS1和PKCS8的公鑰文件是一樣的,沒有區別。
本文適用范圍:已知公鑰結構各域值,組裝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文件,如圖:?
對此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—–
轉載自:http://blog.csdn.net/xuanshao_/article/details/51679824
總結
以上是生活随笔為你收集整理的RSA公钥文件(PEM)解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MAC下使用OpenSSL生成私钥和公钥
- 下一篇: api接口设计