PEM 与 DER 格式详解
PEM 与 DER是用于存储、传输密钥和证书的标准格式,两者紧密关联,可以互相转换,下面详细介绍两种格式:
DER:Distinguished Encoding Rules,可分辩编码规则。DER格式文件后缀通常为 “.der” 和 “.cer”,后缀名并不会影响 DER 格式文件的解析。
PEM:Privacy-Enhanced Mail,隐私增强邮件。PEM格式文件后缀通常为".pem"、“.cer”、“.crt”、“.key”,后缀名并不会影响 PEM 格式文件的解析。
1. PEM 与 DER 关系:
ASN.1 ------(序列化)------ DER ------(Base64编码)------ PEM
对 ASN.1 序列化后,就会生成一个二进制串,这个就是 DER 格式,将二进制进行 Base64 编码,再加上 PEM 格式特有的头尾两行,就生成了 PEM 格式,如RSA私钥的PEM格式如下:
-----BEGIN RSA PRIVATE KEY-----
base64_decode(DER二进制)
-----END RSA PRIVATE KEY-----
2. PEM 与 DER 互相转换
上面了解了 PEM 与 DER 格式的关系,那么对它们进行互相转换就简单了。
下面先生成一个 RSA 私钥文件,该文件是 PEM 格式。生成命令如下:
openssl genrsa -out rsa_private.pem 2048
2.1 PEM 转 DER格式
先将 PEM 文件里面首尾的 “----BEGIN xxx----” 和 “----END xxx----” 两行去掉,再将内容合并为一行(去掉换行符),最后将内容进行 Base64 解码,最后结果就是 DER 格式。通过 openssl 命令转换如下:
openssl rsa -in rsa_private.pem -outform DER -out rsa_private.der
2.2 DER 转 PEM 格式
先将 DER 二进制内容进行 Base64 编码,再按每行 64 个字节进行切分,最后在切分后的内容前后加上 “----BEGIN xxx----” 和 “----END xxx----”。通过 openssl 命令转换如下:
openssl rsa -inform DER -in rsa_private.der -outform PEM -out rsa_private2.pem
3. DER 和 PEM 文件内容解析
上面提到过,DER 是对 ASN.1 结构对象序列化的结果,将DER的内容解析出来就是 ASN.1 结构。下面以 RSA 私钥为演示。
3.1 RSA 私钥 ASN.1结构
RSAPrivateKey ::= SEQUENCE {version Version,modulus INTEGER, -- npublicExponent INTEGER, -- eprivateExponent INTEGER, -- dprime1 INTEGER, -- pprime2 INTEGER, -- qexponent1 INTEGER, -- d mod (p-1)exponent2 INTEGER, -- d mod (q-1)coefficient INTEGER, -- (inverse of q) mod potherPrimeInfos OtherPrimeInfos OPTIONAL
}
3.2 通过 openssl 命令解析 DER 结构
执行 openssl 命令:
openssl rsa -inform der -in rsa_private.der -text -noout
结果详情(有删减):
RSA Private-Key: (2048 bit, 2 primes)
modulus:00:da:d7:8c:0a:86:b4:cc:34:b5:b0:3a:64:00:13:...
publicExponent: 65537 (0x10001)
privateExponent:15:56:6a:eb:23:d3:41:0d:ea:a1:32:30:49:e9:99:...
prime1:00:f2:4f:63:7a:d3:cb:fb:ca:9d:77:2f:ba:88:0a:...
prime2:00:e7:34:bb:28:ab:c1:c8:10:74:19:a4:45:04:b5:...
exponent1:1a:95:67:1e:94:99:ee:77:de:2a:b3:4b:cd:9d:07:...
exponent2:00:d5:d6:99:7b:a6:4f:d6:00:11:c1:5d:83:50:35:...
coefficient:00:c4:91:79:ab:09:f7:8c:c4:9d:81:1c:54:95:6e:...
3.3 通过 openssl 命令解析 PEM 结构
将 PEM 格式文件解析内容,不需要先将其转换成 DER 结构,openssl 命令可以直接将 PEM 格式文件解析出来,命令如下:
openssl rsa -inform pem -in rsa_private.pem -text -noout
解析结果和上面 DER 格式内容是一样的。
PEM 与 DER 格式详解相关推荐
- Java字节码(.class文件)格式详解(一)
原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...
- php serialize取值,PHP 序列化(serialize)格式详解
PHP 序列化(serialize)格式详解(转) 1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PH ...
- php serialize mysql_php 序列化(serialize)格式详解
1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对序列 ...
- 三维重建:PNG格式详解-与LibPNG使用
PNG图像包含了骨骼信息,左边的图像比右边的大几十K,包含了骨骼信息: PNG格式详解:https://blog.mythsman.com/post/5d2d62b4a2005d7404 ...
- 4-4:TCP协议之TCP头部格式详解
文章目录 一:TCP头部格式详解 (1)4位首部长度 (2)序列号和确认应答号 A:可靠性问题 B:32位序号和确认号 (3)窗口大小 (4)标志位 (5)紧急指针 A:带外数据(out_of _ba ...
- PHP 序列化(serialize)格式详解
1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对 ...
- 安卓camera2 API获取YUV420_888格式详解
安卓音视频开发中的一个环节是摄像头采集数据,Android平台上摄像头采集的API有两套,camera1和camera2.本文主要讲的是camera2这套API采集数据,并指明YUV420_888格式 ...
- Gerber 格式详解
Gerber 格式详解 gerber中文 gerber,gerber 文件:590m.com/f/25127180-487459253-79168e(访问密码:551685) 以下内容无关: ---- ...
- BMP格式详解<转>
BMP格式详解 BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Win ...
- 小猫爪:嵌入式小知识10-I2S,TDM,PCM等音频格式详解
小猫爪:嵌入式小知识10-I2S,TDM,PCM等音频格式详解 1 前言 2 I2S 3 Codec模式(左/右对齐) 3.1 左对齐(MSB对齐) 3.2 右对齐(LSB对齐) 4 DSP模式 5 ...
最新文章
- 黑马程序员——c语言学习心得——函数传递二维数组
- DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文)、CNN优化技术、调参学习实践、CNN经典结构及其演化、案例应用之详细攻略
- MySQL探秘(三):InnoDB的内存结构和特性(可靠性和持久性)
- Visual Studio 窗口的图标、图片资源 $this.Icon 在哪查看
- 百度利用AI技术8、9月打击超83亿条有害信息
- Adobe Photoshop CC 打开时报错~配置错误:请卸载并重新安装该产品
- Hyperledger Fabric chaincode 开发(疑难解答)
- 每日英语:Three Shows That Changed The Way Networks Think About Viewership
- Spark内核解析之四:Spark 任务调度机制
- Linux之32/64位int、char、int*、char*与空结构体大小
- Django中Python3安装Crypto使用RSA
- 如何在信用卡反欺诈检测中使用人工智能和机器学习
- 小福利,PMP考试真题刷起来,人人都当项目管理大师!
- Java项目开发管理工具-Maven基础
- Hibernate annotation配置方式的MappedBy使用详解
- IT行业前景怎么样,你还有机会吗?
- 基于SpringCloud的enum枚举值国际化处理实践
- 图像处理 理想低通滤波器_如何为您的文章选择理想的图像
- html评价标准展示,网页设计评分标准.doc
- wannier插值能带拟合5
热门文章
- 每日学英语之041104
- 简单易用的C/C++ 图像库 stb_image stb_image_write
- IDEA学生授权申请方式(免费)
- .NET之盛派微信SDK简单操作
- Android 使用MediaRecorder录音调用stop()方法的时候报错
- android代码 灰色,一行代码实现界面全灰(android,web,flutter)
- geforce experience出现错误尝试重启PC
- BUUCTF_Misc题目题解记录
- 一封谷歌账号辅助邮箱变更的广告邮件
- 大一新生HTML期末作业,网页制作作业(大一学生作品)