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

相关文章

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

Springboot 中使用Sentinel的详细步骤

《Springboot中使用Sentinel的详细步骤》文章介绍了如何在SpringBoot中使用Sentinel进行限流和熔断降级,首先添加依赖,配置Sentinel控制台地址,定义受保护的资源,... 目录步骤 1: 添加 Sentinel 依赖步骤 2: 配置 Sentinel步骤 3: 定义受保护的

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

Ollama整合open-webui的步骤及访问

《Ollama整合open-webui的步骤及访问》:本文主要介绍如何通过源码方式安装OpenWebUI,并详细说明了安装步骤、环境要求以及第一次使用时的账号注册和模型选择过程,需要的朋友可以参考... 目录安装环境要求步骤访问选择PjrIUE模型开始对话总结 安装官方安装地址:https://docs.

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装