[密码学]OpenSSL实践篇

背景

最近在写Android abl阶段fastboot工具,需要我在Android代码中实现一些鉴权加解密相关的fastboot命令,里面用到了OpenSSL。我们先来实践一下OpenSSL在Linux系统中的指令。

OpenSSL官方网站:OpenSSL 中文手册 | OpenSSL 中文网

1. 查看openssl版本

openssl version
# 完整版本信息
openssl version -a

在这里插入图片描述

2. 命令rsa

2.1 生成双钥

2.1.1 生成key1

openssl genrsa -out priv.key

在这里插入图片描述
在这里插入图片描述

2.1.2 提取key2

openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER]
[-in filename] [-passin arg] [-out filename] [-passout arg]
[-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check]
[-pubin] [-pubout] [-engine id]

常用选项

  • -in filename:输入文件
  • -out filename:输出文件
  • -pubout:根据私钥提取出公钥
openssl rsa -in priv.key -out pub.key -pubout

在这里插入图片描述

2.2 查看key内容

openssl rsa -in priv.key -text -noout
openssl rsa -in pub.key -text -noout  -pubin
  • -text:打印出私有密钥的各个组成部分
  • -noout:key对应的ASCII码版本 不打印

2.2.1 key1

openssl rsa -in priv.key -text -noout
RSA Private-Key: (2048 bit, 2 primes)
modulus:00:cd:0d:ba:2b:56:57:68:10:7a:9d:31:47:51:f7:41:0d:ab:de:f1:c7:70:9f:a0:a2:18:49:6f:74:15:85:b5:68:bc:00:d3:46:f6:26:3d:16:a4:23:25:09:65:4f:f9:8e:2f:70:35:54:fe:b4:31:29:a8:70:f8:bf:b0:31:4a:85:79:31:99:da:7c:72:3a:21:f1:77:ec:d9:50:2a:8e:75:ab:34:c8:bf:82:0b:08:de:74:56:48:ba:56:17:30:1a:22:09:a1:f4:b3:cd:d3:6f:84:12:dc:a3:0e:33:95:91:27:4a:ee:f6:4e:2a:d0:85:9c:04:cc:52:c9:f8:5a:f3:78:e5:de:3e:28:5b:21:d0:ff:4a:54:79:4c:d8:81:a1:4e:3f:52:b5:71:d2:6f:5e:13:c0:33:48:53:5c:7f:7e:34:4f:e9:3b:53:7f:00:a0:80:60:69:e5:94:b0:00:1e:33:08:ec:c9:9a:31:de:40:8e:6b:0a:da:67:30:98:16:be:7f:da:11:c0:e0:64:77:09:6b:a6:26:e8:bb:45:17:88:88:f1:d4:e8:cc:d5:e9:70:ca:c2:1b:72:3d:00:e4:2f:6c:e4:68:ab:7e:03:e3:43:fc:eb:66:b2:7a:0d:c7:27:bc:40:a3:37:bf:76:eb:55:ed:a7:13:54:b7:e2:c5
publicExponent: 65537 (0x10001)
privateExponent:3f:4e:32:a0:b8:8a:49:a5:74:c5:5c:f6:60:d6:cd:ed:b3:97:23:db:e7:e8:50:46:5a:eb:29:0e:94:aa:70:04:42:ae:9a:8b:b8:e8:bb:49:67:29:36:80:fd:17:40:bb:65:e7:e5:7f:35:17:5a:6a:3b:07:8d:b4:58:68:0f:52:bf:c4:d1:74:03:a1:9c:52:e8:62:96:eb:cc:75:27:00:2a:f8:23:d6:04:06:f6:18:ff:9f:b7:da:57:43:d7:64:ea:07:41:49:f3:cc:e2:ae:f5:fe:80:c1:92:5b:d8:9c:34:9e:4c:c2:1c:05:d9:d4:b6:03:41:35:7a:07:43:c4:83:57:3e:e3:41:45:5a:c5:c9:f2:6f:2f:80:59:61:08:19:7d:54:4d:3d:09:be:38:5a:e6:ac:74:0f:80:7e:e7:37:9d:f6:f1:0b:5e:27:c4:a0:58:70:0c:9b:b0:af:25:1c:df:53:83:1a:ad:5d:ab:73:5b:c8:30:5b:9b:cf:e4:9d:e0:0d:5a:f6:60:8b:86:9d:44:37:6b:7c:64:54:c6:c1:3f:fc:74:23:5f:59:5b:cc:af:41:40:c8:79:24:29:13:c6:ff:eb:4b:28:aa:3e:9f:bd:9b:9a:fd:79:58:72:20:7d:cc:8b:0b:96:ca:cc:47:b8:2b:5a:75:5f:3b:6d
prime1:00:f4:40:4b:fc:dc:53:e7:b2:74:03:cd:83:dc:36:e8:97:34:01:37:29:0e:67:40:a2:3b:f3:8d:0c:41:21:16:17:d5:e1:f0:25:61:12:38:5e:db:f1:58:fb:b8:92:63:4d:3a:57:a3:25:b5:0b:9a:21:58:c7:60:2b:b7:16:7b:9f:9c:a3:4a:39:9a:23:c8:b1:2c:68:53:32:f1:a4:7c:6c:92:f4:ed:48:30:a2:d7:ed:9f:a4:d8:f9:dc:69:9f:34:39:3a:bf:1a:14:1e:97:48:81:7b:6a:b4:82:5c:70:6f:5f:4b:32:2b:8f:b2:30:0e:09:f3:a8:72:94:c1:30:5b
prime2:00:d6:ea:c0:b8:c2:c3:e0:6f:96:64:f1:3d:cb:1c:89:cc:b7:d9:bf:f6:32:9e:2b:54:37:77:20:3f:3c:24:a1:c5:55:2a:63:6e:42:18:86:e2:19:e3:19:19:62:e3:2f:59:3d:5d:82:8b:d0:98:80:83:dc:4f:1d:7a:45:4f:da:63:58:b6:fb:13:2d:d7:51:c0:d1:4c:7f:7b:32:d3:00:73:b7:bc:4e:b1:3c:ab:23:fd:7c:90:95:e3:a7:7d:5c:78:c2:5b:72:99:16:bb:fc:4b:e2:39:16:68:1b:22:28:6d:4b:0e:29:d3:04:e9:4c:f3:0d:7e:09:46:02:47:a3:5f
exponent1:00:cf:be:f8:62:c4:0b:e1:a0:59:28:fa:de:52:a9:a9:3f:22:0e:7e:9a:3f:13:f7:57:85:e2:6b:6f:a6:dd:bb:6a:de:92:63:ad:87:58:f5:f5:48:e1:88:ab:e1:9b:31:36:f8:8e:9d:c7:6e:ab:c5:96:e3:6a:01:14:6d:8f:83:ea:88:52:22:c9:c7:9e:f4:0e:2e:15:35:de:b8:c5:0c:c7:54:5f:5a:8a:f2:43:2f:a1:7f:0d:b9:37:1c:10:02:47:6a:fd:da:99:15:cf:c7:20:f6:70:c0:9b:73:dd:a8:0c:32:63:44:f2:e4:2f:cc:cb:c4:0f:28:90:fc:91:2c:cd
exponent2:0d:da:13:91:d4:fb:ca:fb:66:36:1b:56:60:40:f6:a0:bb:38:cd:a6:90:9c:a1:2e:4c:64:e1:2f:32:31:2a:3c:0d:c1:2d:a7:6d:9b:27:16:6b:94:b7:89:6b:56:39:37:07:3d:7f:ac:83:45:51:03:2e:af:ea:b6:76:c1:2e:d2:38:65:92:c9:29:ab:37:19:b6:63:b7:d3:b8:f2:e0:94:94:c3:0e:4f:5e:19:a9:b8:2c:cf:24:da:07:71:8d:04:3b:82:a9:60:34:96:e9:2b:fa:e8:b3:09:02:b6:b0:e4:5a:72:0f:40:0a:90:fe:e4:ab:79:f4:1f:0f:06:8f:01
coefficient:45:b8:5d:e3:ec:af:16:00:60:7a:a1:b8:ce:74:50:74:54:58:12:ab:ac:aa:bc:c4:c0:18:ee:75:50:75:18:3d:0f:99:ed:70:7a:b7:0b:4b:46:e6:ba:28:69:d8:c9:f6:a5:5a:f1:98:8d:f8:a2:91:06:16:89:34:3d:54:f3:a3:3b:0b:dd:f5:0a:ad:5c:99:03:f6:d1:fe:f8:d6:e4:61:46:e9:bf:2f:18:f0:1f:24:25:e0:ad:83:c3:63:4e:d0:ec:75:14:3e:d7:d4:76:e1:b7:c2:dd:0d:fd:14:2a:14:d6:10:e9:c9:73:ef:ac:aa:c8:0a:9c:62:52:ea:4e:53

2.2.3 key2

openssl rsa -pubin -in pub.key -text -noout
RSA Public-Key: (2048 bit)
Modulus:00:cd:0d:ba:2b:56:57:68:10:7a:9d:31:47:51:f7:41:0d:ab:de:f1:c7:70:9f:a0:a2:18:49:6f:74:15:85:b5:68:bc:00:d3:46:f6:26:3d:16:a4:23:25:09:65:4f:f9:8e:2f:70:35:54:fe:b4:31:29:a8:70:f8:bf:b0:31:4a:85:79:31:99:da:7c:72:3a:21:f1:77:ec:d9:50:2a:8e:75:ab:34:c8:bf:82:0b:08:de:74:56:48:ba:56:17:30:1a:22:09:a1:f4:b3:cd:d3:6f:84:12:dc:a3:0e:33:95:91:27:4a:ee:f6:4e:2a:d0:85:9c:04:cc:52:c9:f8:5a:f3:78:e5:de:3e:28:5b:21:d0:ff:4a:54:79:4c:d8:81:a1:4e:3f:52:b5:71:d2:6f:5e:13:c0:33:48:53:5c:7f:7e:34:4f:e9:3b:53:7f:00:a0:80:60:69:e5:94:b0:00:1e:33:08:ec:c9:9a:31:de:40:8e:6b:0a:da:67:30:98:16:be:7f:da:11:c0:e0:64:77:09:6b:a6:26:e8:bb:45:17:88:88:f1:d4:e8:cc:d5:e9:70:ca:c2:1b:72:3d:00:e4:2f:6c:e4:68:ab:7e:03:e3:43:fc:eb:66:b2:7a:0d:c7:27:bc:40:a3:37:bf:76:eb:55:ed:a7:13:54:b7:e2:c5
Exponent: 65537 (0x10001)

2.2.3 内容比较

  • Modules:模组,双钥都包含这个数,且内容是一样的
  • publicExponent:公钥指数,一般是固定值65537
  • privateExponent:私钥指数
  • prime1:素数1
  • prime2:素数2
  • exponent1:指数1
  • exponent2:指数2
  • coefficient:系数

3. 命令rsautl

3.1 加密-encrypt

openssl rsautl -encrypt -inkey pub.key -pubin -in text.txt -out sec_text.enc

在这里插入图片描述

3.2 解密-decrypt

openssl rsautl -decrypt -inkey priv.key -in sec_text.enc  -out source.txt && cat source.txt

由于我将cat命令与解密命令进行了拼接,我们能收到命令的返回值:
在这里插入图片描述
此时说明我们成功使用私钥进行了对 使用公钥加密后的文件 成功解密的处理。

3.3 签名-sign

openssl rsautl -sign -inkey priv.key -in text.txt -out sec_text_sign.enc

在这里插入图片描述

3.4 验签-verify

openssl rsautl -verify -inkey pub.key -pubin -in sec_text_sign.enc -out source_sign.txt

在这里插入图片描述

3.5 实践发现

理论上,使用公钥加密,私钥可以解密;同时用私钥加密,公钥也能解密。
但在OpenSSL工具上,后者并不可以,加密命令可以执行,但解密命令会发生报错:

  • 私钥加密:
    在这里插入图片描述
  • 公钥解密:
    在这里插入图片描述

但是使用签名和验签指令实现了该功能。此处的签名和验签其实并不是理论上的签名和验签

4. 命令dgst

# 使用私钥生成摘要签名
openssl dgst -sign priv.key -sha256 -out enc.bin signature.bin# 使用私钥进行摘要签名验证
openssl dgst -prverify priv.key -sha256 -signature enc.bin signature.bin
# 使用公钥进行摘要签名验证
openssl dgst -verify pub.key -sha256 -signature enc.bin signature.bin

PASS后会返回“Verified OK”
在这里插入图片描述

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

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

相关文章

Spring同时集成JPA与Mybatis

Spring同时集成JPA与Mybatis 目录 Spring同时集成JPA与Mybatis ORM Spring ORM Spring ORM 同时集成JPA与Mybatis 一、创建一个SpringBoot项目 二、建立用户信息登记表 三、Web应用项目集成mysql 四、添加Spring Data JPA和Mybatis依赖 五、添加数据表映射实体类 六…

m3u8,一个超酷的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个超酷的 Python 库 - m3u8。 Github地址:https://github.com/globocom/m3u8 在网络视频传输中,HLS(HTTP Live Streaming)是一…

2.vscode 配置python开发环境

vscode用着习惯了,也不想再装别的ide 1.安装vscode 这一步默认已完成 2.安装插件 搜索插件安装 3.选择调试器 Ctrl Shift P(或F1),在打开的输入框中输入 Python: Select Interpreter 搜索,选择 Python 解析器 选择自己安…

LeetCode 567. 字符串的排列

解题思路 滑动窗口的经典例题&#xff0c;直接套模板。 相关代码 class Solution {int hash1[] new int[26];int hash2[] new int[26];public boolean checkInclusion(String s1, String s2) { for(int i0;i<s1.length();i) hash1[s1.charAt(i)-a];char a[] s2.toC…

科研绘图一:箱线图(添加贝赛尔曲线)

R语言绘图系列—箱线图贝赛尔曲线 &#xff08;一&#xff09;: 科研绘图一&#xff1a;箱线图&#xff08;添加贝赛尔曲线&#xff09; 文章目录 R语言绘图系列---箱线图贝赛尔曲线&#xff08;一&#xff09;: 科研绘图一&#xff1a;箱线图&#xff08;添加贝赛尔曲线&…

Linux安装HBase的详细教程及常用方法

Linux安装HBase的详细教程及常用方法如下&#xff1a; 确保已安装Java环境 在Linux上安装HBase之前&#xff0c;首先确保已正确安装了Java环境。使用以下命令检查Java是否已安装&#xff1a; java -version如果Java没有安装&#xff0c;请先安装Java环境。 下载HBase 前往HBas…

plt保存PDF矢量文件中嵌入可编辑字体(可illustrator编辑)

背景&#xff1a; 用默认 plt.savefig() 保存图片&#xff0c;图中文字是以瞄点保存&#xff0c;而不是以文字格式。在编辑矢量图中&#xff0c;无法调整文字大小和字体。 方法&#xff1a; import matplotlib.pyplot as plt import numpy as np# ------输出的图片为illustr…

TMS与WMS:物流领域的双璧,差异与互补

在现代物流领域,运输管理系统(TMS)和仓库管理系统(WMS)是两大核心系统,它们各自扮演着不同的角色,共同推动着物流运作的高效与精准。本文将深入探讨TMS与WMS之间的区别,以及它们如何协同工作,为物流行业带来更大的价值。 一、TMS与WMS:定义与功能之异 TMS,即运输管…

基于Springboot和Redis实现的在线选课系统

1.项目简介 1.1 介绍 毕业设计真的就是demo吗&#xff1f;作为工作前的最后一个校园项目&#xff0c;毕业设计应当尽可能的贴近企业实战&#xff0c;业务不必很复杂&#xff0c;但要做到麻雀虽小五脏俱全。本期学长跟大家一起分享如何开发一个在线选课系统&#xff0c;需求也…

2.二进制的方式读写文件

文章目录 写入文件代码运行结果 读出文件代码运行结果 文件打开模式标记&#xff08;查表&#xff09; 写入文件 ------写文件一共五步&#xff1a;------ 第一步&#xff1a;包含头文件 第二步&#xff1a;创建流对象 第三步&#xff1a;指定方式打开文件 第四步&#xff1a;…

通过路由器监控,优化网络效率

路由器是网络的基本连接组件&#xff0c;路由器监控涉及将路由器网络作为一个整体进行管理&#xff0c;其中持续监控路由器的性能、运行状况、安全性和可用性&#xff0c;以确保更好的操作和最短的停机时间&#xff0c;因此监控路由器至关重要。 为什么路由器监控对组织很重要…

Oracle19c静默部署

Oracle19c静默部署文档 下载地址 https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_free 一、系统基础配置 1、创建用户和用户组 # 创建oinstall和dba用户组 groupadd oinstall groupadd dba# 创建Oracle用户 useradd -g oinstall…

C语言中,基本数据类型介绍

C语言当中各种数据类型的大小&#xff0c;首先要了解有哪些数据类型。 一 字符型&#xff1a; 整数&#xff08;字符&#xff09;类型存储大小值范围char1 字节-128 到 127 或 0 到 255&#xff08;2的8次方&#xff09;unsigned char1 字节0 到 255&#xff08;&#xff09;s…

前端框架的发展史介绍框架特点

目录 1.前端框架的发展历程 2.官网、优缺点、使用场景 2.1 jQuery 2.2 AngularJS 2.3 React 2.4 Vue.js 2.5 Angular 1.前端框架的发展历程 jQuery&#xff08;2006年&#xff09;&#xff1a;jQuery是一个非常流行的JavaScript库&#xff0c;用于简化DOM操作和事件处理…

Java面向对象编程(高级)一

在Java中&#xff0c;面向对象编程更是核心设计理念之一&#xff0c;为开发者提供了丰富的工具和特性来创建灵活、可扩展的应用程序。 本博客将深入探讨Java面向对象编程的高级特性&#xff0c;包括但不限于多态、继承、封装、抽象类、接口等方面的内容。我们将从实际案例出发…

C语言从入门到熟悉------第六阶段

头文件 程序是如何编译生成可执行文件的 在编写程序时&#xff0c;可以将所有程序都放在一个.c文件中&#xff0c;然后通过编译器将这个.c文件编译成.obj目标文件。obj就是object的缩写&#xff0c;即“目标”的意思。一个.obj文件就是一个编译单元。一个程序可以由一个编译单…

【数据库】基础操作

系列文章目录 &#x1f308;座右铭&#x1f308;&#xff1a;人的一生这么长、你凭什么用短短的几年去衡量自己的一生&#xff01; &#x1f495;个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 ❤️相关文章❤️&#xff1a;清灵白羽 漾情天…

【Qt问题】vs里直接打开qt项目的ui会崩溃

问题描述&#xff1a; 当我用VS2019开发Qt的时候&#xff0c;在VS编译器里要用到Qt的ui设计&#xff0c;但是双击打开发现直接就崩溃了。 解决办法&#xff1a; 崩溃的原因很简单&#xff0c;是因为VS默认用的qt designer打开&#xff0c;所以会崩溃&#xff0c;我们右键单击…

4001 - 【基础】畅通工程

时间限制 : 1 秒 内存限制 : 128 MB 某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 "村村通工程" 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还…

LeetCode 新的开始day1

LeetCode 新的开始day1 嗨嗨嗨。。。一个期末加春节&#xff0c;直接给我干颓废了&#xff0c;导致算法之旅被打乱&#xff0c;现在也是准备另起灶炉&#xff0c;好好学习一下了&#xff08;虽然因为服务外包比赛这两个月挺消耗精力的&#xff0c;不够我还是打算抽点时间来算法…