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

查看证书:
openssl x509 -in cert.pem -text -noout
openssl x509 -in cert.cer -text -noout
openssl x509 -in cert.crt -text -noout
openssl x509 -in certificate.der -inform der -text -noout

key格式转换
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

截图实例:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis缓存(笔记一:缓存介绍和数据库启动)

目录 1、NoSQL数据库简介 2、Redis介绍 3、Redis(win系统、linux系统中操作) 3.1 win版本Redis启动 3.2 linux版本Redis启动 1、NoSQL数据库简介 技术的分类&#xff1a;&#xff08;发展史&#xff09; 1、解决功能性的问题&#xff1a;Java、Jsp、RDBMS、Tomcat、HTML、…

FreeRTOS任务调度机制(源码讲解)

任务的调度机制(核心是链表)&#xff01;&#xff01;&#xff01; 使用链表来管理任务 在我前面写的FreeRTOS任务(深入到源码进行分析)&#xff0c;我创建了三个任务&#xff0c;他们的优先级都是一样的&#xff0c;所以他们在FreeRTOS中是轮流执行的&#xff0c;实际上&…

【Python从入门到进阶】56、Mysql防止SQL注入及ORM库简化操作

接上篇《55、使用Python轻松操作Mysql数据库》 上一篇我们讲解了Mysql的基本链接和增删改查&#xff0c;本篇我们来介绍链接Mysql时参数化查询与防止SQL注入以及使用ORM&#xff08;对象关系映射&#xff09;库简化操作的内容。 一、参数化查询与防止SQL注入 在数据库操作中&…

Anaconda 出现HTTP000报错的解决方法

在使用Anaconda 安装python的时候遇到这个错误 chenchen-Standard-PC-i440FX-PIIX-1996:~$ conda create -n sdwebui python3.10.9Solving environment: failedCondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/r/noarch/repodata.jso…

如何跨渠道分析销售数据 - 6年软件销售经验小结

如何跨渠道分析销售数据 - 6年软件销售经验小结&#xff08;1&#xff09; 【前言】 在我过去6年销售工作生涯中&#xff0c;从第一年成为公司销冠后&#xff0c;我当时的确自满的一段时间&#xff0c;认为自己很了不起。但是第一年的销售业绩并没有拿到提成&#xff0c;最终…

架构设计之安全性属性深度剖析:从理论到实践的完美融合

文章目录 引言一、安全性属性的理论探讨1.1 定义说明1.2 安全原则1.3 安全模型1.4 安全机制 二、安全性属性的实践应用2.1 安全风险评估2.2 架构设计中的安全考虑2.3 技术手段和工具2.4 团队协作与沟通2.5 安全政策和流程2.6 合规性和标准2.7 持续监控和改进 三、理论与实践的融…

c++中 unordered_map 与 unordered_set 用法指南

unordered_map 与 unordered_set 区别与联系 unordered_map 和 unordered_set 都是 C 标准模板库&#xff08;STL&#xff09;中的容器&#xff0c;它们使用哈希表作为底层数据结构&#xff0c;提供了快速的查找、插入和删除操作。下面是它们之间的联系与区别&#xff1a; 联系…

大数据分析统计

大数据分析统计 from datetime import datetimeimport pandas as pd import matplotlib.pyplot as pltpm25files [PM2.5_2021.csv, PM2.5_2022.csv, PM2.5_2023.csv] pm10files [PM10_2021.csv, PM10_2022.csv, PM10_2023.csv]def read_csv_file(files):# 每个文件都有表头…

ch5链路层和局域网

回顾TCP/IP参考模型&#xff0c;明确链路层和物理层在整个模型中的地位&#xff0c;简要提出链路层要解决的问题是单段链路的数据传输&#xff0c;物理层解决的是数字信号与电气信号之间的相互转换。 链路层概述 节点&#xff1a;主机和路由器(包括网桥和交换机) 链路&#xf…

移动端路由切换解决方案 —— 虚拟任务栈让你的 H5 像APP一样丝滑

目录 01: 前言 02: 通用组件&#xff1a;trigger-menu 和 trigger-menu-item 构建方案分析 03: 通用组件&#xff1a;构建 trigger-menu 和 trigger-menu-item 04: 前台业务下 H5 的应用场景 05: 通用组件&#xff1a;transition-router-view 构建方案分析 与 虚拟任务栈…

04Linux文件系统

课程目标 1、了解Linux操作系统的硬盘分区信息 2、了解Linux操作系统重各目录的作用 3、了解Linux的启动级别以及关机和重启命令 课程实验 在xshell中使用df -h &#xff0c;df -T&#xff0c;du -sh,fdisk -|,cd ,pwd 使用top &#xff0c;free&#xff0c;cat/proc/xxx…

ChaosBlade混沌测试实践

ChaosBlade: 一个简单易用且功能强大的混沌实验实施工具 官方仓库&#xff1a;https://github.com/chaosblade-io/chaosblade 1. 项目介绍 ChaosBlade 是阿里巴巴开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具&#xff0c;帮助企业提升分布式系统的容错能力&…

面向对象技术

一、基本概念 二、设计原则 三、设计模式的概念与分类 四、创建型模式 五、结构型模式 六、行为型模式 七、Java程序设计

43-5 waf绕过 - 安全狗简介及安装

一、安全狗安装 安装安全狗需要开启 Apache 系统服务。如果 Apache 系统服务未开启,安装过程中可能会出现无法填入服务名称的问题,导致无法继续安装。为避免此问题,可以先在虚拟机中安装 PHPStudy。 安装PHPStudy 下载、安装phpstudy并启动(安装过程可以一路下一步,也…

使用Streamlit和MistralAI创建AI聊天机器人应用

大家好&#xff0c;创建交互式和用户友好型的应用程序通常需要复杂的框架和耗时的开发过程。Streamlit是一个Python库&#xff0c;它简化了以数据为重点的网络应用程序的创建过程&#xff0c;使开发人员和数据科学家能够快速将他们的想法转化为交互式仪表盘和原型。本文将介绍使…

【Java】数据加密

目录 数据加密介绍使用场景密码学历史古代密码学凯撒密码例子特点 维吉尼亚密码原理例子特点 现代密码学介绍 现代密码学的加密算法分类哈希算法优点缺点代码示例【封装写法】 对称加密算法对称加密算法的加密过程解密过程对称加密算法的优点&#xff1a;对称加密算法的缺点&am…

2024 cicsn Ezheap

文章目录 检查 libc2.35利用adddeleeditshow 思路exp结果 检查 libc2.35 利用 add 0x80个chunk&#xff0c;遍历选一个没有被用的&#xff0c;输入的size<0x501,然后malloc后会清零安装输入的size&#xff0c;然后输入内容&#xff0c;长度也是输入的size dele 指定索引…

你认识nginx吗,nginx是做什么的,nginx可以做什么 --1)nginx介绍

一.Nginx 介绍 Nginx&#xff08;发音同engine x&#xff09;是一个异步框架的 Web 服务器&#xff0c;也可以用作反向代理&#xff0c;负载平衡器 和 HTTP 缓存。该软件由 Igor Sysoev 创建&#xff0c;并于2004年首次公开发布。同名公司成立于2011年&#xff0c;以提供支持。…

JavaWeb_SpringBootWeb基础

先通过一个小练习简单了解以下SpringBootWeb。 小练习&#xff1a; 需求&#xff1a;使用SpringBoot开发一个Web应用&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串"Hello World~"。 步骤&#xff1a; 1.创建SpringBoot项目&#xff0c;勾选We…

HTML 转义字符(escape characters)及其对应的符号(symbols)

以下是常见的 HTML 转义字符及其对应的符号&#xff0c;这些可以用于在 HTML 或 JSX 中避免解析错误和特殊字符的冲突&#xff1a; 空格 ( ): 或 引号: 单引号&#xff08;&#xff09;&#xff1a;&apos;、&lsquo;、、&rsquo;双引号&#xff08;"&#x…