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 格式详解相关推荐

  1. Java字节码(.class文件)格式详解(一)

    原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...

  2. php serialize取值,PHP 序列化(serialize)格式详解

    PHP 序列化(serialize)格式详解(转) 1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PH ...

  3. php serialize mysql_php 序列化(serialize)格式详解

    1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对序列 ...

  4. 三维重建:PNG格式详解-与LibPNG使用

    PNG图像包含了骨骼信息,左边的图像比右边的大几十K,包含了骨骼信息:        PNG格式详解:https://blog.mythsman.com/post/5d2d62b4a2005d7404 ...

  5. 4-4:TCP协议之TCP头部格式详解

    文章目录 一:TCP头部格式详解 (1)4位首部长度 (2)序列号和确认应答号 A:可靠性问题 B:32位序号和确认号 (3)窗口大小 (4)标志位 (5)紧急指针 A:带外数据(out_of _ba ...

  6. PHP 序列化(serialize)格式详解

      1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对 ...

  7. 安卓camera2 API获取YUV420_888格式详解

    安卓音视频开发中的一个环节是摄像头采集数据,Android平台上摄像头采集的API有两套,camera1和camera2.本文主要讲的是camera2这套API采集数据,并指明YUV420_888格式 ...

  8. Gerber 格式详解

    Gerber 格式详解 gerber中文 gerber,gerber 文件:590m.com/f/25127180-487459253-79168e(访问密码:551685) 以下内容无关: ---- ...

  9. BMP格式详解<转>

    BMP格式详解 BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Win ...

  10. 小猫爪:嵌入式小知识10-I2S,TDM,PCM等音频格式详解

    小猫爪:嵌入式小知识10-I2S,TDM,PCM等音频格式详解 1 前言 2 I2S 3 Codec模式(左/右对齐) 3.1 左对齐(MSB对齐) 3.2 右对齐(LSB对齐) 4 DSP模式 5 ...

最新文章

  1. 黑马程序员——c语言学习心得——函数传递二维数组
  2. DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文)、CNN优化技术、调参学习实践、CNN经典结构及其演化、案例应用之详细攻略
  3. MySQL探秘(三):InnoDB的内存结构和特性(可靠性和持久性)
  4. Visual Studio 窗口的图标、图片资源 $this.Icon 在哪查看
  5. 百度利用AI技术8、9月打击超83亿条有害信息
  6. Adobe Photoshop CC 打开时报错~配置错误:请卸载并重新安装该产品
  7. Hyperledger Fabric chaincode 开发(疑难解答)
  8. 每日英语:Three Shows That Changed The Way Networks Think About Viewership
  9. Spark内核解析之四:Spark 任务调度机制
  10. Linux之32/64位int、char、int*、char*与空结构体大小
  11. Django中Python3安装Crypto使用RSA
  12. 如何在信用卡反欺诈检测中使用人工智能和机器学习
  13. 小福利,PMP考试真题刷起来,人人都当项目管理大师!
  14. Java项目开发管理工具-Maven基础
  15. Hibernate annotation配置方式的MappedBy使用详解
  16. IT行业前景怎么样,你还有机会吗?
  17. 基于SpringCloud的enum枚举值国际化处理实践
  18. 图像处理 理想低通滤波器_如何为您的文章选择理想的图像
  19. html评价标准展示,网页设计评分标准.doc
  20. wannier插值能带拟合5

热门文章

  1. 每日学英语之041104
  2. 简单易用的C/C++ 图像库 stb_image stb_image_write
  3. IDEA学生授权申请方式(免费)
  4. .NET之盛派微信SDK简单操作
  5. Android 使用MediaRecorder录音调用stop()方法的时候报错
  6. android代码 灰色,一行代码实现界面全灰(android,web,flutter)
  7. geforce experience出现错误尝试重启PC
  8. BUUCTF_Misc题目题解记录
  9. 一封谷歌账号辅助邮箱变更的广告邮件
  10. 大一新生HTML期末作业,网页制作作业(大一学生作品)