RSA公钥文件(PEM)解析 - Go语言中文社区

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—–

本文不讲理论,只做实例数据展示和组装过程。以备自己回忆使用。部分未理解或理解有误之处,还请知悉者不吝赐教。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/mxiaomi/article/details/51679824
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-09-04 17:24:45
  • 阅读 ( 2629 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢