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

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

JavaScript DOM操作与事件处理方法

《JavaScriptDOM操作与事件处理方法》本文通过一系列代码片段,详细介绍了如何使用JavaScript进行DOM操作、事件处理、属性操作、内容操作、尺寸和位置获取,以及实现简单的动画效果,涵... 目录前言1. 类名操作代码片段代码解析2. 属性操作代码片段代码解析3. 内容操作代码片段代码解析4.

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

mysql重置root密码的完整步骤(适用于5.7和8.0)

《mysql重置root密码的完整步骤(适用于5.7和8.0)》:本文主要介绍mysql重置root密码的完整步骤,文中描述了如何停止MySQL服务、以管理员身份打开命令行、替换配置文件路径、修改... 目录第一步:先停止mysql服务,一定要停止!方式一:通过命令行关闭mysql服务方式二:通过服务项关闭