[密码学]OpenSSL实践篇

news2024/11/20 4:28:40

背景

最近在写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.coloradmin.cn/o/1514281.html

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

相关文章

【变量提升】关于JavaScript变量提升的理解,它导致了什么问题?

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript小贴士 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续…

带你摸透C语言相关内存函数

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

vue2中如何实现添加一个空标签的效果,</>

前言&#xff1a; 众所周知&#xff0c;vue3突破了每一个vue文件中只能有一个根标签的限制&#xff0c;但是我们还有很多项目都是vue2的项目&#xff0c;如果让vue2中实现一个类似</>的效果呢&#xff0c;像react的16.2.0的版本之后&#xff0c;可以直接用<></&…

电脑音频显示红叉怎么办?这里提供四种方法

前言 如果你在系统托盘中看到音量图标上的红色X,则表示你无法使用音频设备。即使音频设备未被禁用,当你运行音频设备疑难解答时,仍然会看到此错误。 你的电脑将显示已安装高清音频设备,但当你将鼠标悬停在图标上时,它将显示未安装音频输出设备。这是一个非常奇怪的问题,…

C语言 指针(2)

文章目录 前言 一、数组名的理解 二、指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组模拟二维数组 总结 前言 我们今天继续来了解指针的内容&#xff0c;让大家更加细致的理解到数组的含义 一、数组名的理解 之前我们在学习指针时…

王道OnlineJudge 14

题目 二叉树层次建树就是一层一层的建树&#xff0c;从左到右。随着纵向层次的深入&#xff0c;结点的数量变化规律为&#xff1a;1→2→4→8→16→32。 先画图&#xff0c;然后看图可闭眼写代码 右边为辅助队列&#xff0c;有多少个二叉树结点&#xff0c;就有多少个辅助队…

一个简单的Web UI自动化测试框架Java实现

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

口才教育:如何提升沟通技巧与表达能力

口才教育&#xff1a;如何提升沟通技巧与表达能力 口才教育在现代社会中扮演着越来越重要的角色。拥有良好的沟通技巧和表达能力对于个人的职业发展、人际交往乃至生活质量都至关重要。因此&#xff0c;如何有效地提升口才能力成为了许多人关注的焦点。本文将探讨口才教育的重…

java-可变参数

可变参数是什么&#xff1f; 可变参数就是指传入的参数个数是可变的&#xff0c;不是固定的 为什么要可变参数&#xff1f; 当我们要传入大量的形参时&#xff0c;我们就可以用到可变参数了 定义格式 数据类型...变量名; 例如int ...a; 可变参数的细节&#xff1a; &…

Vue2(五):收集表单数据、过滤器、内置指令和自定义指令

一、回顾 总结Vue监视数据 1.Vue监视数据的原理&#xff1a; 1.vue会监视data中所有层次的数据。 2.如何监测对象中的数据?通过setter实现监视&#xff0c;且要在new Vue时就传入要监测的数据。(1&#xff09;.对象中后追加的属性&#xff0c;Vue默认不做响应式处理(2&#…

java拷贝数组

package com.mohuanan.exercise;public class Exercise {public static void main(String[] args) {int[] arr {1, 2, 3, 4, 5, 6, 7, 8, 8}; //格式化快捷键 CTRL 加 Alt 加 L键// F1截图 F3贴图//调用 copyOfRangeint[] ints copyOfRange(arr, 3, 7);for (int i 0; i &l…

学习网络编程No.13【网络层IP协议理解】

引言&#xff1a; 北京时间&#xff1a;2024/3/5/8:38&#xff0c;早六加早八又是生不如死的一天&#xff0c;不过好在喝两口热水提口气手指还能跳动。当然起关键性作用的还是思维跟上了课程脑袋较为清晰&#xff0c;假如是听学校老师在哪里磨过来磨过去&#xff0c;那我倒头就…

三、HarmonyOS 应用开发入门之运行Hello World

目录 1、课程对象 1.1、有移动端开发经验 1.2、无移动端开发经验 1.3、对 HarmonyOS 感兴趣 2、DevEco Studio 的使用 2.1、DevEco Studio 的关键特性 智能代码编辑 低代码开发 多段双向实时预览 多端模拟仿真 2.2、安装配置 DevEco Studio 2.2.1、官网开发工具下载地…

Vue-Vben-Admin:中大型项目后台解决方案及如何实现页面反向传值

Vue-Vben-Admin&#xff1a;中大型项目后台解决方案及如何实现页面反向传值 摘要&#xff1a; Vue-Vben-Admin是一个基于Vue3.0、Vite、Ant-Design-Vue和TypeScript的开源项目&#xff0c;旨在为开发中大型项目提供一站式的解决方案。它涵盖了组件封装、实用工具、钩子函数、动…

Arduino ESP8266 SSD1306 硬件I2C+LittleFS存储GBK字库实现中文显示

Arduino ESP8266 SSD1306 硬件I2C+LittleFS存储GBK字库实现中文显示 📍相关篇《Arduino esp8266 软件I2C SSD1306 +LittleFS存储GBK字库实现中文显示》 🌼显示效果: ✨将部分函数重构,和上面相关篇的软件I2C通讯相关接口函数移植过来,除了汉字显示采用自己写的API函数外…

【数据结构取经之路】快速排序的非递归实现

概述 递归实现快速排序在一些场景下有栈溢出的风险&#xff0c;下面就谈谈如何用非递归的方法实现快速排序。 非递归实现的思想 递归实现与非递归实现快速排序的本质是一致的&#xff0c;效率并不会因为用了非递归实现而有所提升。递归实现快速排序的本质就在于通过递归&…

Linux系统目录结构详细介绍

目录 一、根目录&#xff08;/&#xff09; 二、/bin 三、/boot 四、/dev 1.设备文件类型&#xff1a; 2.常见设备文件&#xff1a; 五、/etc 六、/home 七、/root 八、/run 九、/sbin 十、 /tmp 十一、/usr 十二、/var Linux系统目录结构是一种层次化的文件系…

【数据结构】Set的使用

文章目录 一、Set的使用1.Set的常用方法&#xff1a;1.boolean add(E e)2.void clear()3.boolean contains(Object o)4.boolean remove(Object o)5.int size()6.boolean isEmpty()7.Object[] toArray()8.boolean containsAll(Collection<?> c)9.boolean addAll(Collecti…

leetcode 热题 100_删除链表的倒数第 N 个结点

题解一&#xff1a; 递归&#xff1a;利用递归栈逆向遍历链表&#xff0c;并用全局变量记录当前遍历的是倒数第几位节点&#xff0c;当遍历到待删节点的上一位节点时&#xff0c;node.nextnode.next.next删除待删节点。需要注意当删除的是头节点时&#xff0c;直接return head.…

zabbix 7.0编译部署教程

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