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

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke