六十九:基于openssl实战验证RSA

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于数据加密和数字签名领域。在实际开发和学习过程中,理解 RSA 的工作原理和使用场景非常重要。本文将以 OpenSSL 工具为基础,通过实例操作来验证和理解 RSA 的关键功能,包括密钥生成、加密解密以及签名验证。

一、准备工作

  1. 安装 OpenSSL 确保系统中已经安装了 OpenSSL。如果尚未安装,可以通过以下命令进行安装:

    • 在 Linux 系统中:

      sudo apt update && sudo apt install openssl
    • 在 macOS 系统中:

      brew install openssl
  2. 验证安装 执行以下命令确认 OpenSSL 已正确安装:

    openssl version

    输出版本号即表示安装成功。

二、RSA 密钥生成

RSA 密钥分为公钥和私钥,私钥用于解密和签名,公钥用于加密和验证签名。

  1. 生成私钥

    openssl genrsa -out private_key.pem 2048

    此命令生成一个 2048 位的 RSA 私钥,并保存到文件 private_key.pem

  2. 从私钥中提取公钥

    openssl rsa -in private_key.pem -pubout -out public_key.pem

    此命令提取私钥对应的公钥,并保存到文件 public_key.pem

三、加密与解密

使用生成的密钥进行加密和解密操作。

  1. 加密数据

    echo "Hello, RSA!" > plaintext.txt
    openssl rsautl -encrypt -inkey public_key.pem -pubin -in plaintext.txt -out encrypted.dat

    该命令使用公钥对文件 plaintext.txt 的内容进行加密,生成的密文保存到 encrypted.dat

  2. 解密数据

    openssl rsautl -decrypt -inkey private_key.pem -in encrypted.dat -out decrypted.txt
    cat decrypted.txt

    此命令使用私钥对密文进行解密,解密后的内容保存到 decrypted.txt 并输出。

四、签名与验证

RSA 签名和验证是数据完整性和身份认证的重要手段。

  1. 生成签名

    openssl dgst -sha256 -sign private_key.pem -out signature.dat plaintext.txt

    此命令使用私钥对文件 plaintext.txt 的内容生成 SHA-256 签名,签名保存到 signature.dat

  2. 验证签名

    openssl dgst -sha256 -verify public_key.pem -signature signature.dat plaintext.txt

    使用公钥验证签名是否正确。如果签名有效,将输出 Verified OK

五、注意事项

  1. 密钥保护 私钥是 RSA 安全性的核心,应妥善保存,防止泄露。可以为私钥设置密码保护:

    openssl genrsa -aes256 -out private_key.pem 2048

    此命令在生成私钥时会要求设置密码。

  2. 数据长度限制 RSA 加密的数据长度不能超过密钥长度减去填充字节数。对于长数据,建议使用混合加密方案:

    • 使用对称加密(如 AES)加密数据。

    • 使用 RSA 加密对称密钥。

六、总结

本文通过实际操作展示了使用 OpenSSL 进行 RSA 的密钥生成、加密解密以及签名验证的全过程。这些操作不仅有助于加深对 RSA 工作原理的理解,还为实际开发中的安全性需求提供了实践参考。

  目录:

一:浏览器发起 HTTP 请求的典型场景_浏览器如何发送用户名密码的请求-CSDN博客

二:基于ABNF语义定义的HTTP消息格式-CSDN博客     

三:网络为什么要分层:OSI模型与TCP/IP模型-CSDN博客   

四:HTTP的诞生:它解决了哪些网络通信难题?-CSDN博客      

五:评估Web架构的七大关键属性-CSDN博客          

六:从五种架构风格推导出HTTP的REST架构-CSDN博客          

七:如何用Chrome的Network面板分析HTTP报文-CSDN博客      

八:URI的基本格式及其与URL的区别-CSDN博客      

九:为什么要对URI进行编码?-CSDN博客      

十:详解HTTP的请求行-CSDN博客     

十一:HTTP 状态码详解:解读每一个响应背后的意义-CSDN博客      

十二:HTTP错误响应码:理解与应对-CSDN博客      

十三:如何管理跨代理服务器的长短连接?-CSDN博客     

十四:HTTP消息在服务器端的路由-CSDN博客     

十五:代理服务器转发消息时的相关头部-CSDN博客   

十六:请求与响应的上下文-CSDN博客   

十七:Web内容协商与资源表述-CSDN博客  

十八:HTTP包体的传输方式(1):定长包体-CSDN博客  

十九:HTTP包体的传输方式(2):不定长包体-CSDN博客

二十:HTML Form表单提交时的协议格式-CSDN博客

二十一:断点续传与多线程下载是如何做到的?-CSDN博客

二十二:Cookie的格式与约束-CSDN博客

二十三:Session及第三方Cookie的工作原理-CSDN博客

二十四:浏览器为什么要有同源策略?-CSDN博客

二十五:如何“合法”地跨域访问?-CSDN博客

二十六:Web条件请求的作用-CSDN博客

二十七:Web缓存的工作原理-CSDN博客

二十八:Web缓存新鲜度的四种计算方式-CSDN博客

二十九:复杂的Cache-Control头部解析-CSDN博客

三十:在 Web 中什么样的响应才会被缓存?-CSDN博客

三十一:HTTP多种重定向跳转方式的差异-CSDN博客

三十二:HTTP 协议的基本认证-CSDN博客

三十三:Wireshark的基本用法-CSDN博客

三十四:如何通过DNS协议解析域名?-CSDN博客

三十五:Wireshark的捕获过滤器-CSDN博客

三十六:Wireshark的显示过滤器-CSDN博客

三十七:WebSocket解决什么问题?-CSDN博客

三十八:WebSocket的约束-CSDN博客

三十九:WebSocket协议:实时通信的未来-CSDN博客

四十:如何从HTTP升级到WebSocket-CSDN博客

四十一:Web传递消息时的编码格式-CSDN博客

四十一:掩码及其所针对的代理污染攻击-CSDN博客

四十三:Web如何保持会话心跳-CSDN博客

四十四:HTTP/1.1发展中遇到的问题-CSDN博客

四十五:HTTP/2特性概述-CSDN博客

四十六:如何使用Wireshark解密TLS/SSL报文?-CSDN博客

四十七:h2c:在TCP上从HTTP/1升级到HTTP/2-CSDN博客

四十八:Web中带带封表的关系:帧,消息与流-CSDN博客

四十九:Stream流ID的作用-CSDN博客

五十:带号格式:带型及设置带的子型-CSDN博客

五十一:HPACK如何减少HTTP头部的大小?-CSDN博客

五十二:HPACK中如何使用Huffman树编码?-CSDN博客

五十三:HPACK中整型数字的编码-CSDN博客

五十四:HPACK中头部名称与值的编码格式-CSDN博客

五十五:服务器端的主动消息推送-CSDN博客

五十六:Stream的状态变迁-CSDN博客

五十七:RST_STREAM帧及常见错误码-CSDN博客

五十八:我们需要Stream优先级-CSDN博客

五十九:非TCP流量控制机制-CSDN博客

六十:HTTP/2与gRPC框架-CSDN博客

六十一:HTTP/2的问题及HTTP/3的意义-CSDN博客

六十二:HTTP/3: QUIC 协议格式-CSDN博客

六十三:七层负载均衡做了些什么?-CSDN博客

六十四:TLS协议的工作原理-CSDN博客

六十五:对称加密的工作原理(1):XOR与填充-CSDN博客

六十六:对称加密的工作原理(2):工作模式_电子密码本(ecb)模式-CSDN博客

六十七:详解AES对称加密算法-CSDN博客

六十八:非对称密码与RSA算法-CSDN博客

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

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

相关文章

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found.

服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found. 1. 故障现象2. 解决思路3. 故障分析4. 案件回溯5. 解决问题 1. 故障现象 有一台服务器业务报无法连接. 尝试用Ping命令发现无法ping通. 通过控制台查看发现有以下报错: error: ..…

解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题

1. IsaacGymEnvs项目介绍 IsaacGymEnvs:基于NVIDIA Isaac Gym的高效机器人训练环境 IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库,专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎&#xf…

AI浪潮下的IT变革之路:机遇、挑战与重塑未来

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 AI浪…

010:传统计算机视觉之大津算法初探

本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 上一节学习了利用 Canny 算法来完成一个图片的边缘检测,从而可以区分出图像的边缘。 本节再了解一个计算机视觉中更常见的应用,那就是把图片的前景和…

【Redis】初识分布式系统

目录 单机架构 分布式系统 应用数据分离架构 应用服务集群架构 读写分离/主从分离架构 冷热分离架构 垂直分库 微服务架构 分布式名词概念 本篇博文,将根据分布式系统的演进一步一步介绍每一种架构的形式,最后为大家总结了一些分布式中常用的…

计算机网络 笔记 数据链路层3(局域网,广域网,网桥,交换机)

局域网: LAN:在某一区域内由多台计算机互联成的计算机组,使用广播信道 特点: 覆盖范围有限:通常局限在几千米范围内,比如一栋办公楼、一个校园或一个工厂等相对较小的地理区域。 数据传输速率高:一般能达到 10Mbps…

配置 One API + ChatGPT-Next-Web,以讯飞星火认知大模型为例

配置 One API ChatGPT-Next-Web,以讯飞星火认知大模型为例 1.0 One API 配置1.1 获取大模型 API1.2 配置 OneAPI 渠道1.3 配置OneAPI 令牌 2.0 ChatGPT-Next-Web 配置 同步发布在个人笔记配置 One API ChatGPT-Next-Web,以讯飞星火认知大模型为例 上一…

Leetcode - 147双周赛

目录 一、3407. 子字符串匹配模式二、3408. 设计任务管理器三、3409. 最长相邻绝对差递减子序列四、3410. 删除所有值为某个元素后的最大子数组和 一、3407. 子字符串匹配模式 题目链接 字符串匹配问题,把字符串 p 分成两段 、,i 是 ’ * ’ 的下标&am…

SqlSugar连接达梦数据库集群超时或异常缓慢

《SqlSugar配置连接达梦数据库集群》文章中介绍SqlSugar连接达梦数据库集群,只需按下图所示位置添加dm_svc.conf文件,并在SqlSugar的连接字符串中指定服务名即可。   但在使用过程中发现,基于.net 6开发的WebApi,编译为ANYCPU&…

探秘 JMeter (Interleave Controller)交错控制器:解锁性能测试的隐藏密码

嘿,小伙伴们!今天咱们要把 JMeter 里超厉害的 Interleave Controller(交错控制器)研究个透,让你从新手直接进阶成高手,轻松拿捏各种性能测试难题! 一、Interleave Controller 深度剖析 所属家族…

C++内存泄露排查

内存泄漏是指程序动态分配的内存未能及时释放,导致系统内存逐渐耗尽,最终可能造成程序崩溃或性能下降。在C中,内存泄漏通常发生在使用new或malloc等分配内存的操作时,但没有正确地使用delete或free来释放这块内存。 在日常开发过程…

服务器/电脑与代码仓gitlab/github免密连接

git config --global user.name "xxxx" git config --global user.email "xxxxxx163.com" #使用注册GitHub的邮箱 生成对应邮箱的密码对 ssh-keygen -t rsa -b 4096 -C "xxxxxx163.com" 把公钥id_rsa.pub拷贝到github中 Setting----->…

Rubyer-WPF:打造优雅、精致的 WPF 用户界面

在桌面应用开发领域,WPF(Windows Presentation Foundation)凭借其强大的 UI 设计能力和丰富的功能,始终是开发者们青睐的工具之一。今天,我将为大家介绍一款专注于 WPF UI 设计的优秀项目——Rubyer-WPF,它…

蓝耘:GPU算力云服务的技术探索与AIGC应用支持

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 一、蓝耘的核心优势 1. 行业领先的基础设施 …

《Spring Framework实战》15:4.1.4.6.方法注入

欢迎观看《Spring Framework实战》视频教程 方法注入 在大多数应用场景中,容器中的大多数bean都是单例(singletons)的。当单例bean需要与另一个单例bean协作或非单例bean需与另一非单例bean协作时,通常通过将一个bean定义为另一个…

【ROS2】☆ launch之Python

☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch,而ROS2保留了XML 格式launch,还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好,但是ROS2官方推荐使用Python方式编写…

了解 Ansys Mechanical 中的网格方法:综合指南

网格是每个有限元分析 (FEA) 仿真的支柱。它将几何图形划分为离散单元,使 Ansys Mechanical 能够近似模型在各种条件下的行为。结构良好的网格可确保准确、可靠和计算高效的结果,而结构不佳的网格可能会导致错误、收敛问题或不必要…

学习threejs,使用TrackballControls相机控制器

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.TrackballControls 相…

云集电商:数据库的分布式升级实践|OceanBase案例

电商行业对数据库有哪些需求 云集电商作为一家传统电商企业,业务涵盖了美妆个护、服饰、水果生鲜、健康保健等多个领域,在创立四年后在纳斯达克上市(股票代码:YJ)。与京东、淘宝、拼多多等电商平台不同,云…

智能租赁系统提升效率与服务质量的全新解决方案

内容概要 智能租赁系统的崛起就像一场春雨,滋润着租赁行业的每一个角落。它通过先进的技术架构,结合数据管理,优化了以往繁琐的租赁流程,让整个过程如同顺畅的流水。比如,通过智能算法自动计算费用,使得用…