openssl加解密和签名验签步骤操作记录

2024-01-24 15:52

本文主要是介绍openssl加解密和签名验签步骤操作记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、AES加解密操作
    • 1.1 EBC模式
    • 1.2 CBC模式
  • 二、RSA加解密操作
  • 三、RSA 加解密和 AES 加解密对比
  • 四、RSA签名和验签操作

一、AES加解密操作

1.1 EBC模式

使用 OpenSSL 进行 AES 的 ECB(电子密码本)模式加解密相对简单。以下是基本步骤:

  1. 生成 AES 密钥:
    首先,你需要生成一个 AES 密钥。AES 支持 128、192 和 256 位的密钥长度。
openssl rand -out aes_key.bin 16 # 生成 128 位(16 字节)的 AES 密钥
openssl rand -out aes_key.bin 24 # 生成 192 位(24 字节)的 AES 密钥
openssl rand -out aes_key.bin 32 # 生成 256 位(32 字节)的 AES 密钥
  1. 加密数据:
    使用 AES ECB 模式加密数据。这里以加密文件 message.txt 为例:
openssl enc -aes-128-ecb -in message.txt -out encrypted_message.bin -kfile aes_key.bin

这里,aes_key.bin 是你的 AES 密钥文件,encrypted_message.bin 是加密后的数据文件。-aes-128-ecb 指定了 AES 的加密模式和密钥长度。你可以根据需要替换为 -aes-192-ecb 或 -aes-256-ecb。

  1. 解密数据:
    使用相同的 AES 密钥和 ECB 模式解密之前加密的数据:
openssl enc -d -aes-128-ecb -in encrypted_message.bin -out decrypted_message.txt -kfile aes_key.bin

这里,decrypted_message.txt 是解密后的数据文件。

请注意,虽然 ECB 模式在某些情况下仍然有用,但它不如 CBC 或其他更复杂的模式安全,因为它不提供混淆效果。在实际应用中,除非有特定的理由,否则通常推荐使用 CBC 或其他更安全的模式。此外,确保你的密钥安全存储,并且只在需要时才使用,以防止密钥泄露。

1.2 CBC模式

以下是使用 OpenSSL 进行 AES 的 的 CBC(密码块链接模式)模式加解密的基本步骤:

  1. 生成 AES 密钥:
    你可以使用 OpenSSL 生成一个随机的 AES 密钥。AES 支持多种密钥长度:128、192 和 256 位。
openssl rand -out aes_key.bin 16 # 生成 128 位(16 字节)的 AES 密钥
openssl rand -out aes_key.bin 24 # 生成 192 位(24 字节)的 AES 密钥
openssl rand -out aes_key.bin 32 # 生成 256 位(32 字节)的 AES 密钥
  1. 加密数据:
    使用 AES 密钥加密数据。这里以加密文件 message.txt 为例:
openssl enc -aes-128-cbc -in message.txt -out encrypted_message.bin -kfile aes_key.bin

这里,aes_key.bin 是你的 AES 密钥文件,encrypted_message.bin 是加密后的数据文件。-aes-128-cbc 指定了 AES 的加密模式和密钥长度。你可以根据需要替换为 -aes-192-cbc 或 -aes-256-cbc。

  1. 解密数据:
    使用相同的 AES 密钥解密之前加密的数据:
openssl enc -d -aes-128-cbc -in encrypted_message.bin -out decrypted_message.txt -kfile aes_key.bin

这里,decrypted_message.txt 是解密后的数据文件。

二、RSA加解密操作

  1. 生成 RSA 密钥对:
    使用 OpenSSL 生成 RSA 公钥和私钥对。通常,你需要指定密钥的长度,比如 1024、2048 或 4096 位。
openssl genrsa -out private_key.pem 2048
openssl rsa -in private_key.pem -pubout -out public_key.pem

这里,private_key.pem 是私钥文件,public_key.pem 是公钥文件。

2.加密数据:
使用公钥加密数据。假设你有一个名为 message.txt 的文件,你可以这样加密它:

openssl rsautl -encrypt -inkey public_key.pem -pubin -in message.txt -out encrypted_message.bin

这里,encrypted_message.bin 是加密后的数据文件。

3.解密数据:
使用私钥解密之前加密的数据:

openssl rsautl -decrypt -inkey private_key.pem -in encrypted_message.bin -out decrypted_message.txt

这里,decrypted_message.txt 是解密后的数据文件。

三、RSA 加解密和 AES 加解密对比

RSA 加解密和 AES 加解密是两种不同类型的加密技术,它们在安全性、效率和用途上有显著的区别:

  1. 加密原理:
    RSA:RSA 是一种非对称加密算法,它基于大数分解的困难性。在 RSA 加密中,有一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密。RSA 通常用于加密小量数据,如密钥或数字签名。
    AES:AES(高级加密标准)是一种对称加密算法,它使用相同的密钥进行加密和解密。AES 是基于迭代的代换-置换网络,通常用于加密大量数据。
  2. 密钥管理:
    RSA:由于 RSA 使用公钥和私钥,密钥管理相对复杂。公钥可以公开,但私钥必须保密。在实际应用中,RSA 通常用于密钥交换,即安全地传输对称密钥。
    AES:AES 使用单一密钥,密钥的保密性要求较高。在通信中,双方需要安全地共享密钥,这通常通过 RSA 或其他非对称加密算法来实现。
  3. 性能:
    RSA:RSA 加解密过程计算量大,速度较慢,不适合加密大量数据。它主要用于小数据量的加密,如加密对称密钥或进行数字签名。
    AES:AES 加解密速度快,适合处理大量数据。在现代硬件上,AES 加密和解密可以非常高效地执行。
  4. 安全性:
    RSA:RSA 的安全性依赖于大数分解问题的难度。随着量子计算的发展,RSA 的安全性可能会受到威胁,尤其是在量子计算机能够实际运行的情况下。
    AES:AES 的安全性基于代数结构的复杂性,目前没有已知的高效算法可以破解 AES。AES 被认为是目前最安全的对称加密算法之一。
  5. 应用场景:
    RSA:常用于安全通信协议(如 SSL/TLS),数字签名,以及作为密钥交换机制的一部分。
    AES:广泛应用于各种数据加密场景,如文件加密、数据库加密、无线通信加密等。

四、RSA签名和验签操作

使用 OpenSSL 进行 RSA 数字签名和验签的过程涉及到几个步骤,包括生成 RSA 密钥对、创建签名、验证签名等。以下是详细的步骤:

  1. 生成 RSA 密钥对:
    首先,你需要生成一个 RSA 密钥对,包括公钥和私钥。
openssl genrsa -out private_key.pem 2048 # 生成 2048 位的私钥
openssl rsa -in private_key.pem -pubout -out public_key.pem # 从私钥生成公钥
  1. 创建签名:
    使用私钥对数据进行签名。这里以签名文件 message.txt 为例。
openssl dgst -sha256 -sign private_key.pem -out signature.bin message.txt

这里,signature.bin 是签名文件,message.txt 是你想要签名的文件。-sha256 指定了使用的哈希算法,你可以根据需要选择其他哈希算法,如 -sha1 或 -sha512。

  1. 验证签名:
    使用公钥验证签名的有效性。确保签名文件和原始文件没有被篡改。
openssl dgst -sha256 -verify public_key.pem -signature signature.bin message.txt

如果签名验证成功,OpenSSL 将不会输出任何内容。如果签名无效或文件被篡改,OpenSSL 会显示错误信息。

签名过程使用的哈希算法应该与验证过程中使用的哈希算法一致。此外,确保你的私钥安全存储,不要泄露给未经授权的人。公钥可以公开分享,用于验证签名。

这篇关于openssl加解密和签名验签步骤操作记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/640189

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1