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文件,如图: 
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—–

转载自:http://blog.csdn.net/xuanshao_/article/details/51679824

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[spring boot] ------ 总结1

spring boot 设计目的:简化spring应用的初始搭建以及开发过程 spring环境的微服务:对原有技术的封装(spring springMVC) 简化开发,提高开发效率(原ssm--->spring boot mybatis) 自动配置&…

RSA私钥文件(PEM-PKCS#1)解析

在PKCS#1 RSA算法标准中定义RSA私钥语法 RSAPrivateKey :: SEQUENCE { version Version, //版本 modulus INTEGER, // RSA合数模 n publicExponent INTEGER, //RSA公开幂 e privateExponent INTEGER, //RSA私有幂 d prime1 INTEGER, //n的素数因子p prime2 INTEGER, //n的…

Spring的@Configuration使用cglib代理的效果和我自己写的简单实现

下面的代码,照着复制就能跑起来 今天看了下Spring的Configuration,即java类配置bean,(这个spring3的新功能,虽然现在已经spring5了,但是这种配置bean的方式也是比较火的) 做了如下测试,发现一个…

Xcode中StaticLibrary和Framework的共同点和区别

一、共同点:两者其实都是静态库。二、区别1.承载的内容范畴:(1)StaticLibrary的产出物只是一个.a文件,为二进制执行文件。分享给别人的时候,头文件、静态资源文件需要另外提供。(2)Framework为一站式分享方案,其实是一…

[分布式] ------ 全局唯一id生成之雪花算法(Twitter_Snowflake)

雪花算法(Twitter_Snowflake) 我们知道,分布式全局唯一id的生成,一般是以下几种: 基于雪花算法生成基于数据库基于redis基于zookeeper 本文说下雪花算法,后面附源码以及测试代码。 如下图: …

非对称加解密交互故事

1.鲍勃有两把钥匙,一把是公钥,另一把是私钥。 2.鲍勃把公钥送给他的朋友们—-帕蒂、道格、苏珊—-每人一把。 3.苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果 4.鲍勃收信后,用私钥解密&#xff0…

2019年规划

2019年规划,到2019-12-31检查: 1.至少读5本与工作无关的书(平均两个月1本),每本都产出读后感 1.1 《重构 改善代码既有设计》,2月19日~3月5日,刚好两周读完,产出两篇总结&#xff0…

RSA私钥文件(PEM-PKCS#8)解析

***此文仅针对没有执行加密的PKCS#8私钥文件***一、实例解析PKCS#8格式使用的是ASN.1结构,首先我们对一个没有执行加密的PKCS#8格式私钥文件进行一下解析,方便我们下面分析其结构。命令:openssl asn1parse -i -in privatekey.pem结果如下&…

分布式和集群的区别

分布式和集群的区别 分布式是多个不同功能的机器共同完成一件事情 集群是多个相同功能的机器完成的是相同的事情 分布式是为了分担压力 集群是为了稳定性和高可用 举个例子: 一个厨师开了一个饭店,他要负责做饭和卖饭,他的压力就比较大&am…

Sqlite3中replace语句用法详解

在本例中使用如下数据库表: (图 1) 该表的表名为student, 存储学生信息。 所有字段的数据类型都是TEXT 。 其中id和name作为复合主键。 email字段加上了唯一约束。建表语句如下: CREATE TABLE IF NOT EXISTS student …

[分布式一致性协议] ------ raft协议的解释与理解

前言 在分布式系统中,为了保证容错性,一般会维护多个副本集群,提高系统的高可用,但与之带来的问题就是多个副本的一致性(consensus)问题。 我们认为,对于一个具有一致性的的集群中,…

iOS应用图片命名规则

一、界面图片命名规则:MyImage.png 一般图片命名MyImage2x.png 高清图片命名MyImage~iphone.png iPhone 和 iPod touch版一般图片命名MyImage2x~iphone.png iPhone 和 iPod touch版高清图片命名MyImage~ipad.png …

用户自定义排序的几种实现思路

场景 每个用户,有多个分组 每个分组在页面展示,而且是有顺序的,这个顺序是由用户决定 以下是关于多种情况下的库表设计思路: 情景一:如果每改一次,就要实时修改库,而且用户可以任意修改顺序&…

重构,体现一个工程师的基本素养和底蕴

重构小记(重构,改善既有代码的设计读后总结) 我们要时时刻刻保持一颗项目要重构的心。 在非技术出身的领导看来,能用的代码就是好代码,只关注功能。 在工程师看来,代码不仅要好用,更要好看&…

应用内购买(IAP)各类型在服务端的验证规则

一、非消耗品(比如单本杂志购买,苹果服务器支持恢复) 1.先验证服务器有没有购买记录,如果有,则不处理,此次操作成功 ;2.如果服务器没有购买记录,则到苹果服务器验证(1)首先到正式验证地址验证收据,如果返回…

@Transactional事务生效条件与样例

Transactional事务生效条件 Transactional注释的方法,不能是private修饰 Transactional注释的方法,必须是有接口的方法实现(通用的Spring面向接口编程的套路) Transactional注释的方法,必须要通过接口的方式调用&…

利用.dSYM和.app文件准确定位Crash位置

当发布到iPhone上的应用程序Crash之后,iPhone会自动生成一个Crash Log(*.crash),这个文件包含了一些有用的调试信息,但对于堆栈,它只记录的函数地址,而无法显示函数名。函数名保存在一个叫dSYM的…

使用maven的profile区分本地环境和线上环境

使用maven的profile区分本地环境和线上环境 多环境开发,使用maven-profile,就可以在打包的时候通过参数的调整,最终打的包也不同。 以区分本地数据库和线上数据库为例 比如测试环境,用的是本地测试数据库;生产环境用…

查看函数库.a函数符号信息

一、概述 nm命令可以列出一个函数库文件中的符号表。它对于静态的函数库和共享的函数库都起作用。对于一个给定的函数库,nm命令可以列出函数库中定义的所有符号,包括每个符号的值和类型。还可以给出在原程序中这个函数(符号)是在多…

重构,体现一个工程师的基本素养和底蕴(细节篇)

重构小记(重构,改善既有代码的设计读后总结) 方法级别 提炼函数: 将一个大方法,拆成多个小方法,难点在于小方法的命名。 假如有早上上学的一个大方法, 那么就应该在里面有起床,穿衣…