[密码学]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

# verify by RSA2048 with SHA-256
# Output a base64 string after signing
openssl dgst -sha256 -sign <private key> <file path> | openssl base64 -A# Decode base64 string
$ openssl base64 -d -A -in <base64 encoded file> -out <base64 decoded file>
# Verify the signature
$ openssl dgst -sha256 -verify <public key> -signature <decoded file> <file path>

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

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

相关文章

mybatis-plus整合spring boot极速入门

使用mybatis-plus整合spring boot&#xff0c;接下来我来操作一番。 一&#xff0c;创建spring boot工程 勾选下面的选项 紧接着&#xff0c;还有springboot和依赖我们需要选。 这样我们就创建好了我们的spring boot&#xff0c;项目。 简化目录结构&#xff1a; 我们发现&a…

C语言:内存函数

目录 1.memcpy2.memmove3.memset4.memcmp5.atoi 1.memcpy void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置这个函数再遇到\0时不会停下来如果source和destination有…

哪个骨传导蓝牙耳机的好?独家揭秘六大选购技巧

在科技飞速前进的今天&#xff0c;骨传导蓝牙耳机以独特的听觉技术逐渐进入大众视野&#xff0c;赢得了众多消费者的青睐。作为一名资深的数码爱好者&#xff0c;我最近频繁地收到朋友们的咨询&#xff0c;他们希望了解哪个骨传导蓝牙耳机的好&#xff1f;对于初入数码圈的朋友…

zabbix 7.0编译部署教程

zabbix 7.0编译部署教程 2024-03-08 16:50乐维社区 zabbix7.0 alpha版本、beta版本已经陆续发布&#xff0c;Zabbix7.0 LTS版本发布时间也越来越近。据了解&#xff0c;新的版本在性能提升、架构优化等新功能方面有非常亮眼的表现&#xff0c;不少小伙伴对此也已经跃跃欲试。心…

ThreeJs 射线拾取不准确设置

欢迎关注进来点个关注; 关注获取更多咨询!关注获取答案! 1、效果图如下: 2、问题描述:点击一开始无法获取当前的位置,官方推荐直接使用 mouseClick.x = (event.offsetX / window.innderWidth) * 2 - 1; mouseClick.y = -(event.offsetY / window.innderHeight) * 2 + 1;…

promise,async →await,then→catch,try→catch 使用简介

提示&#xff1a;promise&#xff0c;async →await&#xff0c;then→catch&#xff0c;try→catch 使用简介 文章目录 前言一、Promise二、promise then/catch三、promise async/await try/catch总结 前言 需求&#xff1a;promise&#xff0c;async →await&#xff0c;then…

多数问题求解之蒙特卡洛与分治法

多数问题&#xff08;Majority Problem&#xff09;是一个有多种求解方法的经典问题&#xff0c;其问题定义如下&#xff1a; 给定一个大小为 n n n的数组&#xff0c;找出其中出现次数超过 n / 2 n/2 n/2的元素 例如&#xff1a;当输入数组为 [ 5 , 3 , 5 , 2 , 3 , 5 , 5 ] […

爬虫案例2:playwright 超爽体验

参考链接&#xff1a;https://playwright.bootcss.com/python/docs/intro 目标网站&#xff1a;https://spa6.scrape.center/通过观察&#xff0c;页面的信息是通过Ajax请求后返回的信息 下面使用playwright实现绕过token的获取直接拿到返回的数据import asyncio import json f…

邮件发送:行业会议邀请的高效新选择

随着数字化浪潮的不断深入&#xff0c;营销手段也在不断的创新和升级。因此&#xff0c;如何高效、精准地触达并吸引目标用户群体参与行业会议已成为众多会议举办方的核心关注点。在这一背景下&#xff0c;邮件推送服务凭借其独特的优势正逐渐成为行业会议邀请的新选择。 邮件推…

Linux本地搭建FastDFS系统

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

初级爬虫实战——伯克利新闻

文章目录 发现宝藏一、 目标二、简单分析网页1. 寻找所有新闻2. 分析模块、版面和文章 三、爬取新闻1. 爬取模块2. 爬取版面3. 爬取文章 四、完整代码五、效果展示 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

挑战杯 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸表情识别 该项目较…

explain关键字的用法(mysql高级部分)

文章目录 简介explain关键字分析 简介 explain主要是用来分析sql语句的&#xff0c;当你的系统中出现慢查询SQL后&#xff0c;你可以使用explain关键字对该语句进行分析。通过使用explain&#xff0c;我们可以得到以下结果 表的读取顺序 哪些索引可能使用 哪些索引被实际使用…

48. 【Linux教程】yum 软件包管理

本小节介绍如何在 Linux 系统中使用 yum 命令软件管理。 1.yum 简介 yum 是 Red Hat 软件包管理器&#xff0c;它能够查询有关可用软件包的信息&#xff0c;从存储库获取软件包&#xff0c;安装和卸载软件包&#xff0c;以及将整个系统更新到最新的可用版本。yum 在更新&#…

netty草图笔记

学一遍根本记不住&#xff0c;那就再学一遍 public static void test_nettyFuture() {NioEventLoopGroup group new NioEventLoopGroup();log.info("开始提交任务");Future<String> future group.next().submit(() -> {log.info("执行异步任…

如何实现sam(Segment Anything Model)|fastsam模型

sam是2023年提出的一个在图像分割领域的大模型&#xff0c;其具备了对任意现实数据的分割能力&#xff0c;其论文的介绍可以参考 https://hpg123.blog.csdn.net/article/details/131137939&#xff0c;sam的亮点在于提出一种工作模式&#xff0c;同时将多形式的prompt集成到了语…

【漏洞复现】网康科技 NS-ASG 应用安全网关 SQL注入漏洞(CVE-2024-2330)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

Spring学习 基础(三)MVC

5、Spring MVC 传统Web模式&#xff1a; Model:系统涉及的数据&#xff0c;也就是 dao 和 bean。View&#xff1a;展示模型中的数据&#xff0c;只是用来展示。Controller&#xff1a;处理用户请求都发送给 &#xff0c;返回数据给 JSP 并展示给用户。 随着 Spring 轻量级开发…

Python逆向:pyc字节码转py文件

一、 工具准备 反编译工具&#xff1a;pycdc.exe 十六进制编辑器&#xff1a;010editor 二、字节码文件转换 在CTF中&#xff0c;有时候会得到一串十六进制文件&#xff0c;通过010editor使用查看后&#xff0c;怀疑可能是python的字节码文件。 三、逆向反编译 将010editor得到…

【Redis】redis持久化

redis 持久化 Redis是内存数据库&#xff0c;数据都是存储在内存中&#xff0c;为了避免进程退出导致数据的永久丢失&#xff0c;需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘&#xff1b;当下次Redis重启时&#xff0c;利用持久化文件实现数据恢复。除此之…