六十九:基于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博客

相关推荐
daqinzl1 天前
利用ffmpeg将视频转为m3u8并加密
ffmpeg·openssl·m3u8·加密 解密
CAir25 天前
openssl编译
windows·编译·openssl
迷茫运维路8 天前
Openssl1.1.1s rpm包构建与升级
运维·openssl·rpmbuild
曹朋羽17 天前
openssl 安装及使用
网络·openssl
紫火桑葚1 个月前
windows openssl编译x64版libssl.lib,编译x64版本libcurl.lib,支持https,vs2015编译器
windows·网络协议·https·静态库·openssl·libcurl
花落已飘1 个月前
openssl中的SM3
c语言·算法·哈希算法·openssl
花落已飘1 个月前
openssl使用哈希算法生成随机密钥
算法·哈希算法·openssl
花落已飘1 个月前
openssl哈希算法
算法·哈希算法·openssl
zwm_yy2 个月前
openssl生成ca证书
openssl·ca