当前位置: 首页 > news >正文

openssl 常用命令demo

RSA Private Key的结构(ASN.1)


RSAPrivateKey ::= SEQUENCE {
    version           Version,
    modulus           INTEGER,  -- n
    publicExponent    INTEGER,  -- e
    privateExponent   INTEGER,  -- d
    prime1            INTEGER,  -- p
    prime2            INTEGER,  -- q
    exponent1         INTEGER,  -- d mod (p-1)
    exponent2         INTEGER,  -- d mod (q-1)
    coefficient       INTEGER,  -- (inverse of q) mod p
    otherPrimeInfos   OtherPrimeInfos OPTIONAL
}

key生成

生成私钥
openssl genrsa -out rsa_private_key.pem 2048
生成公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
PEM格式是文本格式,是把key的内容base64编码而来,数据格式称为DER

key信息查看

查看私钥内容
openssl pkey -in privkey.pem -text -noout
得到的结果会是如上private key结构的数据。包含modulus,publicExponent,privateExponent,prime1,prime2,exponent1,exponent2,coefficient,等等信息。

查看公钥内容
openssl pkey -pubin -in pubkey.pem -text -noout
包含modulus和publicExponent部分。


查看key信息:openssl rsa -noout -text -in myserver.key
查看csr信息:openssl req -noout -text -in myserver.csr
查看证书信息:openssl x509 -noout -text -in ca.crt

PEM转DER格式

# 私钥: PEM --(convert)--> DER
$ openssl rsa -inform PEM -in privkey.pem -outform DER -out privkey.der
  
# 公钥: PEM --(convert)--> DER
$ openssl rsa -inform PEM -in pubkey.pem -pubin -outform DER -out pubkey.der


DER转PEM格式

# 私钥: DER --(convert) --> PEM
$ openssl rsa -inform DER -in privkey.der -outform PEM -out privkey.PEM
  
# 公钥: DER --(convert) --> PEM
$ openssl rsa -inform DER -in pubkey.der -pubin -outform PEM -out pubkey.PEM

MTK 平台PEM,DER相互转换工具

python pem_to_der.py pubkey.pem pubkey.der 
# der_to_pem.py

key数据转换

DER转为数组data:
xxd -i pubk.der

the same result:
openssl rsa -in erase_pri.pem -pubout > test_pub.pem
openssl rsa -inform PEM -in test_pub.pem -pubin -outform DER -out test_pub.der
<==>
openssl rsa -in erase_pri.pem -pubout -outform DER >test_pub2.der

MTK 平台 DER转为数组的.h文件工具
./der_extractor pubkey.der pubkey.h ANDROID_SBC
 
[Usage] ./der_extractor pubk.der CHIP_KEY.ini SV5_SBC
[Usage] ./der_extractor priv.der CHIP_KEY.ini SV5_SIGN
[Usage] ./der_extractor pubk.der oemkey.h ANDROID_SBC
[Usage] ./der_extractor priv.der SIGNTOOL_2048_PRVK.h ANDROID_SIGN

签名、验签:

用私钥给文件签名
echo "hello there" > test.txt

openssl pkeyutl -sign -in test.txt -inkey key.pem -out test.sig
用公钥验证签名
openssl pkeyutl -verify -in test.txt -sigfile test.sig -pubin -inkey pubkey.pem
用公钥恢复签名文件的内容
openssl pkeyutl -verifyrecover -in test.sig -pubin -inkey pubkey.pem
用公钥加密文件
openssl pkeyutl -encrypt -in test.txt -pubin -inkey pubkey.pem -out test.enc
用私钥解密文件
openssl pkeyutl -decrypt -in test.enc -inkey key.pem -out test.dec
MTK代码中的相关工具
../vendor/mediatek/proprietary/scripts/sign-image_v2/der_extractor/


openssl kdf 校验key实例:

C:\Users>openssl version
OpenSSL 3.3.0 9 Apr 2024 (Library: OpenSSL 3.3.0 9 Apr 2024)

C:\Users>openssl kdf -keylen 32 -kdfopt digest:SHA256 -kdfopt pass:3199265327188065 -kdfopt hexsalt:0FDBC6E7530A320B98ABE5ADA8879CE4 -kdfopt iter:30000 PBKDF2
29:6C:80:F9:CC:E5:BE:2F:E6:44:F4:6A:E3:68:DF:38:4C:4E:B3:3A:10:73:FE:05:43:B9:E5:D9:CB:04:F8:D4

对应原始数据:
IMEI        ITERATION    SIMLOCK1_SALT            SIMLOCK1_HCK                                SIMLOCK_CONTROL_KEY
xxxxxxxxxxxxxxxx    30000    0FDBC6E7530A320B98ABE5ADA8879CE4    296C80F9CCE5BE2FE644F46AE368DF384C4EB33A1073FE0543B9E5D9CB04F8D4    3199265327188065

补充:

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 互相转换
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 结构。

openssl rsa -inform pem -in rsa_private.pem -text -noout
openssl rsa -inform der -in rsa_private.der -text -noout

截图实例:

相关文章:

  • matlab GUI界面设计
  • openVPN+SmartDNS=openDNS or smartVPN?
  • 关于FPGA 使用SPI FLASH固化时如何配置固化参数
  • 多线程基础知识-
  • 游戏逆向工具分析及解决方案
  • Charles-ios无法抓包原因之一证书
  • 反射获取成员变量
  • 单片机按键处理模块
  • PostgreSQL的学习心得和知识总结(一百四十四)|深入理解PostgreSQL数据库之sendTuples的实现原理及功能修改
  • JZ2440笔记:rtc驱动
  • 修改wsl2默认配置使宿主机不能使用localhost或127.0.0.1访问WSL
  • 32. 【Java教程】集合
  • rtl8723DU移植 android4.4 4418
  • Go基础编程 - 03 - init函数、main函数、_(下划线)
  • 练习题-17
  • 深入了解以太坊
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 2019.2.20 c++ 知识梳理
  • JAVA SE 6 GC调优笔记
  • Laravel Telescope:优雅的应用调试工具
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Wamp集成环境 添加PHP的新版本
  • webpack入门学习手记(二)
  • 安卓应用性能调试和优化经验分享
  • 从输入URL到页面加载发生了什么
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 两列自适应布局方案整理
  • 你不可错过的前端面试题(一)
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 设计模式走一遍---观察者模式
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • Android开发者必备:推荐一款助力开发的开源APP
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​Python 3 新特性:类型注解
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #宝哥教你#查看jquery绑定的事件函数
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Note)C++中的继承方式
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)为什么要选择C++
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)一些感悟
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .CSS-hover 的解释