基础篇-常用对称、非对称、摘要加密算法介绍

2023-11-19

本文属于《OpenSSL加密算法库使用系列教程》之一,欢迎查看其它文章。也可以查看《GmSSL国密加密算法库使用系列教程》

常见的加密算法可以分成三类,对称加密算法、非对称加密算法、Hash算法。

一、对称加密算法

对称加密是使用同一个密钥对信息进行加解密。

这就类似于,我们对一个压缩包进行加密时输入一个密码,那么我们在解密时输入同一个密码进行解密,一个道理。

加密过程:明文+密钥a,进行加密,输出密文。

解密过程:密文+密钥a,进行解密,输出明文。

另外在多方通信中,密钥的管理也会非常的麻烦。在数据传送前,发送方和接收方必须商定好密钥,然后使双方都能保存好密钥。其次如果一方的密钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘密钥,也就是说每一组收发方所使用的密钥都是唯一的,例如:A电脑与B、C、D都有通信,那么A就得存储与B、C、D三台电脑通信所用的密钥。这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

小结:

优点:速度快,适合加密大量数据。

缺点:密钥的传递存在着安全隐患,若在网络上传输,密钥泄露,则消息内容泄露。

常见算法:AES、DES、3DES,国密SM4

二、非对称加密算法

1. 公钥加密,私钥解密

可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。

与对称加密算法不同,是由一对密钥来进行加解密的过程,分别称为公钥私钥

两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。

一般有如下2种用法:

  • 公钥加密,私钥解密。
  • 私钥加密,公钥解密。

即如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;

如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。

从理论上讲,生成的公钥和私钥是对等的,只是两个数而已。把它们哪个公开出去用于加密,哪个保留起来用于解密,都是一样的。

但是严格地讲,“私钥加密,公钥解密”这种说法是错误的。实际上,公钥和私钥在安全等方面,有完全不同的要求。

故,我们常用的用法是:公钥加密,私钥解密

通常个人保存私钥,公钥是公开的(可能同时多人持有)。如下所示:

在这里插入图片描述

公开的公钥,可以被多人(B、C、D)用于数据加密,生成的密文,只能由对应的私钥进行解密,而私钥只有A知道,我们可以通过网络传递公钥,但私钥从始至终没有传递,所以在安全性上避免了私钥泄露导致数据泄露。

小结:

优点:非对称加密与对称加密相比,其安全性更好,可以避免秘钥在传递过程中泄露。

缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

算法过程:B是发送方,A是接收方,A、B都有各自的公钥和私钥,B使用A的公钥对信息进行加密传输,A收到密文后使用A的私钥解开。

快记法则:公钥加密,私钥解密

常见算法:RSA、ECC,国密SM2

2. 数字签名防止信息被篡改

上述非对称加密方式看起来,安全性上似乎完美。但是实际上存在一个问题。

我们还是以上图为例子,进行说明。

公钥是公开的,任何人可以获取,那就意味着,除了B、C、D以外的其他人,可以轻易拿到公钥。

那么假设是在战场场景下,别有用心的人就可以利用公钥将假指令进行加密,传递给A,虽然B、C、D传递的消息没有泄露,但是却不能避免,别人篡改消息,A就不知道收到的消息到底是真还是假。

所以,在非对称加密的基础进行了改进,解决密文在传输过程中可能会被篡改的问题。

那就是对消息内容进行数字签名,证明这个数据的来源是B/C/D。

(1)数字签名

数字签名的过程,如下图所示:

在这里插入图片描述

可以与第1小节中图所示对比,可以发现,B使用A的公钥加密数据前,增加了签名的步骤,将摘要信息用发送者B的私钥加密,与原始数据m一起,再使用接收者A的公钥进行二次加密,将密文传送给接收者。

在进行数字签名时,我们常使用的是 私钥签名,公钥验签

即用私钥对摘要信息进行加密,用对应的公钥进行解密,得到摘要信息。

注意与上一章节中“公钥加密,私钥解密”使用场景进行区别。

注意:

签名:等同于加密;验签:等同于解密。

摘要信息的计算,在下一章节,将会介绍,此处只需要知道就是计算算法就行。

(2)验签

验签的过程,如下图所示:

在这里插入图片描述

接收者A首先使用自己的私钥,对密文进行解密,得到签名+数据m,然后使用发送者B的公钥,对签名进行解密,得到摘要1;同时采用相同的摘要计算方式,计算数据m的摘要,得到摘要2。

比较摘要1和摘要2是否相同,如果相同,则说明原始数据m,没有被篡改,这条消息不是伪造的,的确是由B发送。

因为B的私钥,只由B自己保管,其他人只有公钥无法正确加密摘要信息。

小结:

快记法则:私钥签名,公钥验签

数字签名过程:

(1)B生成一对密钥(公钥和私钥),私钥不公开,B自己保留。公钥为公开的,任何人可以获取。

(2)B用自己的私钥对消息加签,形成签名,并将加签的消息和消息本身一起传递给A。

(3)A收到消息后,在获取B的公钥进行验签,如果验签出来的内容与消息本身一致,证明消息是B发送的。

所以在实际应用中,要根据实际情况,也可以同时使用加密和签名,达到既不泄露也不被篡改的效果,更能保证消息的安全性。

三、Hash加密算法(摘要算法)

上文中,我们提到的摘要算法,即此处的Hash算法。

1. 单向算法,密文长度固定

Hash算法特别的地方在于它是一种单向算法,用户可以通过hash算法对目标信息生成一段特定长度唯一hash值,却不能通过这个hash值重新获得目标信息。

因此Hash算法常用在不可还原的密码存储、信息完整性校验等。

Hash算法是不可逆的,而其他加密算法是可逆的。

比如,常见的md5,对文件计算md5,可以产生出一个128位(16字节)的散列值(hash value),用于确保文件内容的完整一致性。但是无法由md5值,解密出文件内容。

常见的Hash算法:MD2、MD4、MD5、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1、RIPEMD160,国密SM3

2. 数字签名中使用的Hash算法

在2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

故而,目前,SHA-1是流行的用于创建数字签名的Hash算法。

小贴士

我不知道,是否上述描述以及图示,会让大家觉得似乎很复杂,但是其实并不是。

图上的部分过程,在OpenSSL中进行了封装,我们调用相关函数会比较简单。

在本文,我们是从基本使用原理上进行介绍。

后续,我们会使用OpenSSL相关加密函数进行实战,再逐步进行介绍。

参考链接:

《RSA加密、解密、签名、验签的原理及方法》

《【计算机网络】对称加密、非对称加密和Hash加密的介绍和区别》

《浅谈常见的七种加密算法及实现》



若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基础篇-常用对称、非对称、摘要加密算法介绍 的相关文章

随机推荐

  • 老嫂子的保姆级科普 选择视频剪辑软件就从阅读本文开始

    选错一款视频剪辑软件 是种什么样的体验 就好像新婚当晚 发现老婆是人妖一样 浪费了感情 又错付了青春 新手在学习视频剪辑的初期 需要花费大量精力去熟悉剪辑软件的基础功能 而软件挑选本身没有对错可言 适合自己的才是最好的 因此 本文仅从事实与
  • 初识Java(一)

    Java开发语言 前言 一 Java是什么 二 应用领域 特点及核心机制 1 应用领域 2 特性及特点 特性 特点 3 两种核心机制 三 JDK JRE JVM的关系 四 Java环境变量配置 五 编写我的第一个程序 总结 前言 计算机语言
  • C# 实现rabbitmq 延迟队列功能(不堵塞)

    最近在研究rabbitmq 项目中有这样一个场景 在用户要支付订单的时候 如果超过30分钟未支付 会把订单关掉 当然我们可以做一个定时任务 每个一段时间来扫描未支付的订单 如果该订单超过支付时间就关闭 但是在数据量小的时候并没有什么大的问题
  • 计算机基础msoffice等宽两缆,一级计算机基础及《MSOffice应用》模拟题

    一级计算机基础及 MSOffice应用 模拟题 三 字处理题 共25分 26 在考生文件夹下打开文档WORD DOCX 按照要求完成下列操作并以该文件名 WORD oocx 保存文档 文档开始 IBM电子商务专利的特点 通过对IBM e c
  • Typora主题下载

    1 0前言 Typora有很多主题可以使用 默认的主题很少 想要自己的主题更加个性化 可以去添加更多的主题来优化自己的使用体验 2 0下载主题 2 1 找到Typora主题的网站 1 打开一个typora文件此点击 2 进入偏好设置 3依次
  • 【目标检测】32、让你一文看懂且看全 NMS 及其变体

    文章目录 一 NMS 1 1 背景 1 2 方法 1 3 代码 1 4 不足 二 Soft NMS 2 1 背景 2 2 方法 2 3 效果 2 4 代码 2 5 不足 三 Softer NMS 3 1 背景 3 2 方法 四 IoU Ne
  • MySQL开启bin_log后导致创建函数、存储过程失败。Error:Result_ 1418 - This function has none of DETERMINISTIC

    搭建分布式服务 使用了主从数据库 需要使用MySQL的binlog去同步数据 但是开启binlog后导致新增函数 存储过程等报错 具体报错信息如下 Result 1418 This function has none of DETERMIN
  • kitti depth complement

    代码 运行环境 windows10 open3d版本 0 12 0 import cv2 import numpy as np import os import math import open3d as o3d basic path D
  • 【好工具】网页剪藏+免费云端笔记+一键变博客

    欢迎大家来到 好工具 专栏 这个专栏面向所有希望获得高效生产力工具的朋友 在这个专栏里 我们会和大家聊聊那些狂拽酷霸炫的生产力工具 相信大家一定我一样 茫然于庞大的工具海洋 却仍找不到称心的它来使用 这也是 好工具 专栏存在的意义 发掘 折
  • 贝叶斯优化及其python实现

    贝叶斯优化是机器学习中一种常用的优化技术 其目的是在有限步数内寻找函数的最大值或最小值 它可以被视为在探索不同参数配置与观察这些配置结果之间寻求平衡点的过程 基本思想是将我们在过去的观察和体验 传递到下一个尝试中 从而在等待数据的反馈时 逐
  • 微信小程序开发实战第五讲之授权登录

    上一节 我们实现了简单的通过用户名和密码调用接口进行登录的实战 但是在小程序中 有个特殊的情况 就是很少有厂商去开发一个注册功能或者是通过用户名 密码来登录的逻辑 为什么 因为APP 小程序为了用户体验 是尽量多的避免用户多次输入交互 所以
  • 物联网LoRa系列-17:LoRa终端Sx1262芯片内部的射频信号放大器

    至此 我们已经拆解了天线是如何发送和接收空中的无线电磁波信号 拆解了无线终端如何对射频前端的高频电信号进行进一步处理的 还拆解了无线终端的发送和接收如何分时复用天线的半双工模式 本篇将进一步拆解无线终端是如何对射频电信号进行进一步的处理 包
  • 【优化器】(一) SGD原理 & pytorch代码解析

    1 简介 很多情况下 我们调用优化器的时候都不清楚里面的原理和构造 主要基于自己数据集和模型的特点 然后再根据别人的经验来选择或者尝试优化器 下面分别对SGD的原理 pytorch代码进行介绍和解析 2 梯度下降 梯度下降方法可以分为3种
  • constexpr 用法

    1 简介 constexpr函数指的是在编译的时候就能得到其返回值的函数 也就是说编译器将constexpr函数直接转换成其返回值 因此 constexpr函数都是被隐式地定义为内联函数 使用constexpr关键字来修饰constexpr
  • C++设计模式(二)观察者模式

    1 观察者模式知识点 1 定义 定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变的时候 所有依赖它的对象都得到通知并自动更新 2 动机 将一个系统分割成一系列相互协作的类有一个常见的副作用 需要维护相关对象间的一致性 我们不希望为
  • 设计模式——原型模式

    原型模式顾名思义 就是指以某个实例为原型 copy出一个新的实例 该实例属性与原型相同或者是类似 很多时候 我们需要创建大量的相同或者相似的对象 如果一个个用new 构造函数的形式去创建的话比较繁琐 就像孙悟空要想变出成千上万个猴子猴孙总不
  • wmic命令学习

    我目前知道wmic可以查询进程 还可以查询服务 查询进程使用wmic process 如果想知道进程的名字 进程号 执行文件路径可以通过get来获取 还可以根据where筛选进程进行查询 wmic process get name proc
  • 开心档-软件开发入门教程网之Bootstrap4 信息提示框

    Bootstrap4 信息提示框 Bootstrap 4 可以很容易实现信息提示框 提示框可以使用 alert 类 后面加上 alert success alert info alert warning alert danger alert
  • Struts2 校验(XML配置校验)

    参考文档 http struts apache org 2 0 9 docs ajax client side validation html http struts apache org 2 0 9 docs pure javascrip
  • 基础篇-常用对称、非对称、摘要加密算法介绍

    本文属于 OpenSSL加密算法库使用系列教程 之一 欢迎查看其它文章 也可以查看 GmSSL国密加密算法库使用系列教程 常见的加密算法可以分成三类 对称加密算法 非对称加密算法 Hash算法 一 对称加密算法 对称加密是使用同一个密钥对信