加密算法的密钥格式简介

格式

PKCS1 格式

pkcs1.pem

-----BEGIN RSA PRIVATE KEY-----
Mxxxxxxx
-----END RSA PRIVATE KEY-----
PKCS8 格式

pkcs8.pem

-----BEGIN PRIVATE KEY-----
MIxxxxxx
-----END PRIVATE KEY-----
实践
  1. 实践:openssl 生成pkcs1格式的私钥,密钥长度1024位

openssl genrsa -out private_pkcs1.pem 1024

  1. PKCS8格式私钥再转换为PKCS1格式

openssl rsa -in private_pkcs8.pem -out pkcs1_new.pem

  1. PKCS1私钥转换为PKCS8

openssl pkcs8 -topk8 -inform PEM -in private_pkcs1.pem -outform pem -nocrypt -out private_pkcs8.pem

公钥
  1. 从pkcs1私钥中生成pkcs8公钥

openssl rsa -in private_pkcs1.pem -pubout -out public_pkcs8.pem

  1. 从pkcs8私钥中生成pkcs8公钥

openssl rsa -in private_pkcs8.pem -pubout -out public_pkcs8_2.pem

  1. pkcs8公钥转pkcs1公钥

openssl rsa -pubin -in public_pkcs8.pem -RSAPublicKey_out

openssl rsa -pubin -in public_pkcs8.pem -RSAPublicKey_out -out public_pkcs1.pem

  1. pkcs1公钥转换为pkcs8公钥

openssl rsa -RSAPublicKey_in -in public_pkcs1.pem -pubout

规范

  1. PKCS1:全名《Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications》
    里面包含了RSA加密、解密、签名验签等所有的内容,当然也包含了私钥的格式

  2. PKCS8:全名《Public-Key Cryptography Standards (PKCS) #8: Private-Key Information Syntax Specification》
    专门用来存储私钥的文件格式规范

pkcs1私钥 和 pkcs8私钥 的区别

openssl rsa -in private_pkcs1.pem -out pkcs1.der -outform DER

openssl pkcs8 -topk8 -inform PEM -in private_pkcs1.pem -outform DER -nocrypt -out pkcs8.der

使用 VSCode 的 Hexdump 插件查看二进制 der 文件 ,仔细观察就会发现 PKCS8 私钥的二进制文件内容只是比 PKCS1 私钥的内容多了 26 byte 长度的一个开头

使用 asn1parse 命令进行验证

openssl asn1parse -i -in pkcs8.der -inform DER

会发现 0 ~ 25 byte 的内容都是一个关于算法信息的内容

  1. PEM与DER格式

PEM就是对DER的内容做了base64的编码,然后加上一个不同的开头和结尾

  1. DER格式的存储使用了一种叫asn1的数据存储格式来存储各个数据项

openssl asn1parse -i -in pkcs1.der -inform DER

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值