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

相关文章

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型