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

***此文仅针对没有执行加密的PKCS#8私钥文件***


一、实例解析

PKCS#8格式使用的是ASN.1结构,首先我们对一个没有执行加密的PKCS#8格式私钥文件进行一下解析,方便我们下面分析其结构。

命令:openssl asn1parse -i -in privatekey.pem

结果如下:

[html] view plaincopy
  1. 0:d=0  hl=4 l=1213 cons: SEQUENCE
  2. 4:d=1  hl=2 l=   1 prim:  INTEGER           :00
  3. 7:d=1  hl=2 l=  13 cons:  SEQUENCE
  4. 9:d=2  hl=2 l=   9 prim:   OBJECT            :rsaEncryption
  5. 20:d=2  hl=2 l=   0 prim:   NULL
  6. 22:d=1  hl=4 l=1191 prim:  OCTET STRING      [HEX DUMP]:308204a3 02010002 82010100 ccae938f 6186eb98 f11cac6b 09a3afb8 69a0b9f3 a7b2f4f4 826e4f32 06fc581d f39cc846 091470d3 96b16c35 317c8d91 bd534f23 59e436ea 555114c7 c89c8794 8a4d6ccf dbc6527b 2598ff3e c953be67 087e7f13 d3a90dad c8fdd44f f886ea23 6a6a1541 fa162934 0b9d7e49 3bba475a 14d55c4e ade38f43 35f5c31d cba0ddf4 280ec8ba 593cb350 58496cff b6f121db c4a71076 d0c56e58 4769cc35 6b72fd1d 2e8a2120 b61a6fd7 ae15f941 4bbf4065 a542c8d6 75df2a3d ae3d8870 32b72708 67f904a8 78300a9c 288d82e6 12320148 ae19c0ca e48cbea1 59f58bbc d5db79a8 a58f671d 9d7c2519 8cbfd67c 82b25d3d 7d3d6f5e f61c5086 d8def686 7a40198f 02030100 01028201 0069e98c 018d7dbb 3b90c83d 8fc59525 c04f2814 10b89e29 92bc4b48 3fa2cdc0 eafebc0a 05f37cd8 45249cfa 592c1a3f 4742a871 32e1b8ed 91a44428 7498a226 a5fe4ac2 1b6ca5da d84e4435 0fd02dbd 40a36c91 65390929 42dbd63c 9e85038a f478841c 2bdfb4c7 ed5e7548 7baca45f 77858042 1b946f44 1a8b3978 955a610b 77f5da22 65dbb3e2 716950f2 16ae97d3 6240129b d165c973 e19e28e5 0caf07dd e5b6cf07 c52f07ba 5f45bcb7 0f43518d cde07043 0c8683bf 9a43df24 fc74eb94 8c190bf6 a97284c0 7ecbc043 dfaac9e8 c6c84d38 f73b189b 20fbac1b 8839d2cd b22cc4ca 714f9415 1bda047a c0fe0ea8 5975728b fbbb1edd f652e296 058469e5 01028181 00f98c64 8f14a540 eb45665d 47ca5efc f761436a 4192d9ab 1ebe8b26 0d1ae811 9026dd35 4e3edc8d 52e65792 74161c76 51c18bd1 943d90ae c60dae31 ac4c7e92 c774ed1d cf26224e 42761f02 cbc382ed 7777b66a 37cda8e5 c4d899b0 8505bf03 b2e60277 b06f12fd 7442ffdb 187da2e4 98ca04d8 91939891 a445982b 2a9d5c79 df028181 00d1f93d 75431192 9a9cdd2d 7e8c0416 904c0a9a 47d49394 092543d7 55a34e21 0406bbd9 4006741b 1cf75cd5 3a51b63a 1bc0f175 8059e1da 1dad8891 8f3932e4 277b787c f10ba690 6b3d2882 65ed807d 13176ff3 514ad3fa 3ef3e21c e430c677 7e180833 522bc5f0 fde3a00f 286839e0 d168104c 0cec6def a46d0ab2 a86bc7b6 51028181 009aaea2 5a6a32b0 d5e4d3b9 b859419d cdfd551b 550020ba 483955e9 45304b6f 2f8a578d c62d82ea 7adb5aa6 e61c1a92 60c4f6d4 f6ed5e74 67416d9b 4eb0afb8 6db8158e 67abbc92 03f251f0 9abb5ab9 b556d814 68f8aadb 99b3a538 5c8c1e45 bdab8316 0ba01e06 4afd88b8 972ab140 bf5061c6 981e03f1 2b01147c 9552ab52 c3028180 583eae74 94be52e5 c5dd329c 878dc449 da9b6e21 981679d5 aa22abe2 22e2d7ff 50312c69 bb0c9ac4 7eb5362b ef616d64 729f47e9 ac5cbe05 51041f60 9902695e aa8685c3 ec489153 707d90e7 f37bd794 e979b441 caf7f1a8 f968630a 07f1b110 7e5b1bee 81d50ba6 383ef17f e2e5c835 59cdd798 6ad8fd29 1666b395 12cef931 02818014 322ac5f2 18b27183 dd4302c2 09b2507b e7cd40b4 51c41ebf 32faa37f 6f2bf375 dc147b55 a2f18b63 2e6b0702 cd48e1b7 89f2e86d 07fb4209 62a9c087 cab67ba3 3e363c3a 4d5f7ab6 0d6c6ad8 8e4044d5 3a38e652 d1d2d7f0 72d4a239 f4d99845 f76a3f6a f843c33b f48619ea 66b97e09 3c2a2ed3 e29529ef e02c8303 709932


ASN.1结构输出格式说明:

d =0   表示节点在整个文件中的偏移长度

hl=4   表示节点头字节长度

l=710 表示节点数据字节长度

cons  表示该节点为结构节点,表示包含子节点或者子结构数据

prim   表示该节点为原始节点,包含数据

OCTET STRING [HEX DUMP],就是我们需要的私钥数据,此数据块遵循PKCS#1密钥数据格式。

SEQUENCE、OCTETSTRING等都是ASN.1中定义的数据类型,具体可以参考ASN.1格式说明。


二、格式定义说明:


为了方便理解,下面给出相关的PKCS定义。

PCKS#8文件格式定义:

[html] view plaincopy
  1. PrivateKeyInfo ::SEQUENCE {  
  2.         version                   Version,  
  3.         privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,  
  4.         privateKey                PrivateKey,  
  5.         attributes           [0]  IMPLICIT Attributes OPTIONAL } 
其中:
version,代表版本号
privateKeyAlgorithm使用的私钥算法,详细格式在PKCS#5 2.0中的定义。这里就不详细说明了。
[html] view plaincopy
  1. PBES2-params ::SEQUENCE {  
  2.        keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},  
  3.        encryptionScheme AlgorithmIdentifier {{PBES2-Encs}}  
  4.    }  

privateKey,私钥数据,最后一个OCTET STRING数据块,此数据块遵循PKCS#1密钥数据格式。

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

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

相关文章

分布式和集群的区别

分布式和集群的区别 分布式是多个不同功能的机器共同完成一件事情 集群是多个相同功能的机器完成的是相同的事情 分布式是为了分担压力 集群是为了稳定性和高可用 举个例子: 一个厨师开了一个饭店,他要负责做饭和卖饭,他的压力就比较大&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命令可以列出函数库中定义的所有符号,包括每个符号的值和类型。还可以给出在原程序中这个函数(符号)是在多…

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

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

MVPVM模式介绍

一、概述MVPVM即:Model-View-Presenter-ViewModel。此模式是MVVM和MVP模式的结合体。但是交互模式发生了比较大的变化。MVVM参考本博客文章:iOS-MVVM-模式介绍MVP参考本博客文章:MVP模式介绍 二、原理:Presenter同时持有View、Mod…

[线程池] ------ 形象的描述线程池,用一个特好记的例子来记忆

线程池 为了减少线程频繁的创建和销毁过程,引入池的概念。 将一些线程先创建好放在线程池中,每次来任务就用池中的线程执行,空闲时池中线程就等待,但不销毁。 原始线程池的创建: ThreadPoolExecutor executor1 new …

分组密码的工作模式

一、理论基础1.概述密码学中,块密码的工作模式允许使用同一个块密码密钥对多于一块的数据进行加密,并保证其安全性。块密码自身只能加密长度等于密码块长度的单块数据,若要加密变长数据,则数据必须先被划分为一些单独的密码块。通…

数据仓库基本认知

数据仓库概念: 数据仓库,英文名称Data Warehouse,简写为DW。 是一种面向分析的存储系统。 他是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,对多样的业务数据进行筛选与整合。 它为企业提供一…

PBOC3.0中使用的国密SM2算法

一、知识准备 PBOC3.0规范就是《中国金融集成电路(IC)卡规范》3.0版本。SM2是国密局推出的一种他们自己说具有自主知识产权的非对称商用密码算法。本身是基于ECC椭圆曲线算法的,所以要讲SM2, 先要弄懂ECC。 完全理解ECC算法需要一定的数学功底…

mapper注入失败,NoSuchBeanDefinitionException: No qualifying bean of type [com.xxx.XxxMapper] found for d

mapper注入失败: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.xxx.XxxMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependen…

战地体能训练模拟器

一、名称:战地体能训练模拟器二、整体介绍: 1.体验者身处一个封闭空间的正中央,空间内部表面全部附着显示器,包含地板(因为地板是平的,可以使用投影的方式实现),经过视角上的设计,体验者就像身处…

java读文件写文件

使用了try-with-resource语法(JDK1.7及以上),代码更加便捷 Junit测试样例,先写入文件,再读出来: RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations "classpath:spring-conf…