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

截图实例:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三丰云免费服务器

三丰云网址&#xff1a; https://www.sanfengyun.com 可申请免费云服务器&#xff0c;1核/1G内存/5M宽带/有公网IP/10G SSD硬盘/免备案。 收费云服务器&#xff0c;买2年送1年&#xff0c;有很多优惠

空调外机清洁机器人设计

现在的空调&#xff0c;有很多安装在高层&#xff0c;一旦安装使用后&#xff0c;外机几乎不可能再清洗。因为费用高&#xff0c;清洁工人的钱应该是好几百还不止&#xff1b;清洁风险高&#xff0c;空调师傅需要高空作业&#xff0c;如果发生意外业主难以承担。但空调运行几年…

欧科云链:Web3.0时代 具备链上数据分析能力的公司愈发凸显其价值

在当今激烈的市场竞争中&#xff0c;新兴互联网领域迅速崛起&#xff0c;Web2.0已相对成熟&#xff0c;用户创造数据&#xff0c;但不拥有数据。被视为新的价值互联网的Web3.0&#xff0c;赋予用户真正的数据自主权&#xff0c;它的到来被认为是打破Web2.0垄断的机遇。 在Web3…

kafka 发送文件二进制流及使用header发送附属信息

文章目录 背景案例发送方接收方 背景 需要使用kafka发送文件二进制以及附属信息 案例 发送方 import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord;import java.io.InputStream; import java.nio.charset.S…

Ubuntu20.04安装ffmpeg,并捕获视频流

工控机&#xff1a;幻影峡谷 系统&#xff1a;Ubuntu20.04 摄像头&#xff1a;杰瑞微通环星光USB摄像头记录一下使用ffmpeg拉取视频流的原因&#xff1a;刚开始用的是ubuntu系统自带的 茄子 软件&#xff0c;但是视频流很卡&#xff08;非常卡&#xff0c;基本上不能用&#xf…

开箱即用的Spring Boot 企业级开发平台【毕设项目推荐】

项目概述 基于 Spring 实现的通用权限管理平台&#xff08;RBAC模式&#xff09;。整合最新技术高效快速开发&#xff0c;前后端分离模式&#xff0c;开箱即用。 核心模块包括&#xff1a;用户、角色、职位、组织机构、菜单、字典、日志、多应用管理、文件管理、定时任务等功能…

【kubernetes】关于k8s集群如何将pod调度到指定node节点(亲和与反亲和等)

目录 一、调度约束 1.1K8S的 List-Watch 机制 ⭐⭐⭐⭐⭐ 1.1.1Pod 启动典型创建过程 二、调度过程 2.1Predicate&#xff08;预选策略&#xff09; 常见的算法 2.2priorities&#xff08;优选策略&#xff09;常见的算法 三、k8s将pod调度到指定node的方法 3.1指定…

css动态导航栏鼠标悬停特效

charset "utf-8"; /*科e互联特效基本框架CSS*/ body, ul, dl, dd, dt, ol, li, p, h1, h2, h3, h4, h5, h6, textarea, form, select, fieldset, table, td, div, input {margin:0;padding:0;-webkit-text-size-adjust: none} h1, h2, h3, h4, h5, h6{font-size:12px…

为什么GD32F303代码运行在flash比sram更快?

我们知道一般MCU的flash有等待周期&#xff0c;随主频提升需要插入flash读取的等待周期&#xff0c;以stm32f103为例&#xff0c;主频在72M时需要插入2个等待周期&#xff0c;故而代码效率无法达到最大时钟频率。 所以STM32F103将代码加载到sram运行速度更快。 但使用GD32F30…

20.Redis之缓存

1.什么是缓存&#xff1f; Redis 最主要的用途,三个方面:1.存储数据(内存数据库)2.缓存 【redis 最常用的场景】3.消息队列【很少见】 缓存 (cache) 是计算机中的⼀个经典的概念. 在很多场景中都会涉及到. 核⼼思路就是把⼀些常⽤的数据放到触⼿可及(访问速度更快)的地⽅, ⽅…

前端逆向之查看接口调用栈

一、来源 再分析前端请求接口数据的时候&#xff0c;其中有一个sid不知道是前端如何获取的&#xff0c;一般情况下只需要全局搜搜sid这个字符串或者请求接口的名称就可以了&#xff0c;基本都能找到sid的来源&#xff0c;但是今天这个不一样&#xff0c;搜什么都搜不到 接口地…

安装 ArchLinux 和 KDE Plasma 6 | 双系统/虚拟机

注&#xff1a;本文写于 2024/06/02 &#xff0c;ArchLinux 最新版为 2024.06.01 &#xff08;为什么用 Arch 懒得写了&#xff0c;给个别人写的链接&#xff1a;写在主力使用archlinux一年之后&#xff08;一&#xff09;Why Arch Linux? &#xff0c;总之就是pacman真香&…

【UnityShader入门精要学习笔记】第十六章 Unity中的渲染优化技术 (下)

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 减少需要处…

数据结构复习指导之交换排序(冒泡排序,快速排序)

目录 交换排序 复习提示 1.冒泡排序 1.1基本思想 1.2算法代码 1.3性能分析 2.快速排序 2.1基本思想 2.2算法代码 2.3性能分析 交换排序 复习提示 所谓交换&#xff0c;是指根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。 基于交换的排序算法很…

ROS无人机追踪小车项目开发实战 | 第四届中国智能汽车创新大会圆满结束

2024年5月26日&#xff0c;阿木实验室在深圳第四届中国智能汽车创新大会上&#xff0c;开展的《Prometheus开源平台-ROS无人机追踪小车项目开发实战课》圆满结束。 该实战课从初学者的角度出发&#xff0c;通过实践性讲解和开发&#xff0c;使开发者们系统地学习了硬件系统架构…

vue3使用vue3-print-nb打印

打印效果 1.下载插件 Vue2.0版本安装方法 npm install vue-print-nb --saveVue3.0版本安装方法&#xff1a; npm install vue3-print-nb --save2.main.js引入 vue2引入 import Print from vue-print-nb Vue.use(Print)vue3引入 import print from vue3-print-nb // 打印…

在Windows安装Flutter

一、安装 Android Studio 官网&#xff1a; 下载 Android Studio 和应用工具 - Android 开发者 | Android Developers 教程&#xff1a;Android Studio 安装配置教程 - Windows(详细版)-CSDN博客 Flutter 官网&#xff1a;Windows | Flutter 中文文档 - Flutter 中文开发…

JVM学习-详解类加载器(一)

类加载器 类加载器是JVM执行类加载机制的前提 ClassLoader的作用 ClassLoader是Java的核心组件&#xff0c;所有的Class都是由ClassLoader进行加载的&#xff0c;ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部&#xff0c;转换为一个与目标类型对应的ja…

打开C语言常用的内存函数大门(三) —— memset()函数(内含讲解用法和模拟实现)

文章目录 1. 前言2. memset函数2.1 memset函数原型2.2 memset函数参数的介绍2.3 memset函数的使用演示 3. memset函数的模拟实现4. 总结 1. 前言 哈喽&#xff0c;我们又见面了。通过前面两个内存函数(memcpy、memmove函数)讲解的锤炼后&#xff0c;对如何解析一个自己从来没有…

V90PN伺服驱动器支持的标准报文介绍

1、V90 PN总线伺服通过FB285实现速度控制 V90 PN总线伺服通过FB285速度控制实现正弦位置轨迹运动(解析法和数值法对比测试)-CSDN博客文章浏览阅读448次。上面的位置函数有明确的解析函数&#xff0c;这里我们可以利用解析法求解其导数(微分),当然我们这里借助第三方数学软件求…