加密算法之AES
liuian 2024-12-02 22:18 63 浏览
接着Base64编码讲,既然Base64不能用来加密,那么,有哪些可用的加密算法呢?
按照加密和解密的密钥是否相同,可分为对称加密,非对称加密,散列算法等。
对称加密:又称为 共享密钥加密算法。在 对称加密算法 中,使用的密钥只有一个,发送 和 接收 双方都使用这个密钥对数据进行 加密 和 解密。这就要求加密和解密方事先都必须知道加密的密钥。
- 数据加密过程:在对称加密算法中,数据发送方 将 明文 (原始数据) 和 加密密钥 一起经过特殊 加密处理,生成复杂的 加密密文 进行发送。
- 数据解密过程:数据接收方 收到密文后,若想读取原数据,则需要使用 加密使用的密钥 及相同算法的 逆算法 对加密的密文进行解密,才能使其恢复成 可读明文。
常用的对称加密有DES,3DES,AES等
非对称加密:
非对称加密算法,又称为 公开密钥加密算法。它需要两个密钥,一个称为 公开密钥 (public key),即 公钥,另一个称为 私有密钥 (private key),即 私钥。
因为 加密 和 解密 使用的是两个不同的密钥,所以这种算法称为 非对称加密算法。
常用的非对称加密算法有RSA,DSA等
散列算法:
一般指SHA家族,英文为Secure Hash Algorithm,中文指安全散列算法,能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。除了SHA之外,像MD5,hash散列算法也是其中的代表。SHA家族如下表
散列算法一般是不可逆的,主要用作信息一致性和完整性的校验。
ok,,进入今天的正题AES,由上文我们知道AES是一个对称加密算法,接下来我们了解一下其算法原理。
AES相关概念
在讲AES之前,我们先聊一聊DES算法,为什么?且听我娓娓道来
DES 加密算法是一种 分组密码,以 64 位为 分组对数据 加密,它的 密钥长度 是 56 位,加密解密 用 同一算法。
DES 加密算法是对 密钥 进行保密,而 公开算法,包括加密和解密算法。这样,只有掌握了和发送方 相同密钥 的人才能解读由 DES加密算法加密的密文数据。因此,破译 DES 加密算法实际上就是 搜索密钥的编码。对于 56 位长度的 密钥 来说,如果用 穷举法 来进行搜索的话,其运算次数为 2 ^ 56 次。
3DES,是基于 DES 的 对称算法,对 一块数据 用 三个不同的密钥 进行 三次加密,强度更高
无论DES怎么加密,只要计算器的性能足够高,那么也可以在短时间内破解掉密钥编码,那么安全性也并非牢不可破,同时其加密的效率也不是很理想。关于DES的加密原理,有兴趣的同学可以去看维基百科。
AES作为DES的取代者在安全性,效率,灵活性上都有不少提升。
在了解AES之前,我们先搞清楚什么是密钥,填充和模式。
1.密钥
密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。
AES支持三种长度的密钥:128位,192位,256位,平时大家所说的AES128,AES192,AES256,实际上就是指的AES算法对不同长度密钥的使用
从效率上看AES128最高,AES256的安全性最高,本质在于他们加密的轮数不同而已。
2.填充
要想了解填充的概念,我们先要了解AES的分组加密特性。
什么是分组加密呢?我们来看看下面这张图:
AES算法在对明文加密的时候,并不是把整个明文一股脑加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit,所以也有人称对称加密为块加密。
这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密结果。
但是这里涉及到一个问题:
假如一段明文长度是192bit,如果按每128bit一个明文块来拆分的话,第二个明文块只有64bit,不足128bit。这时候怎么办呢?就需要对明文块进行填充(Padding)。
填充分类:
NoPadding:
不做任何填充,但是要求明文必须是16字节的整数倍。
PKCS5Padding(默认):
如果明文块少于16个字节(128bit),在明文块末尾补足相应数量的字符,且每个字节的值等于缺少的字符数。
比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6个字节,则补全为{1,2,3,4,5,a,b,c,d,e,6,6,6,6,6,6}
ISO10126Padding:
如果明文块少于16个字节(128bit),在明文块末尾补足相应数量的字节,最后一个字符值等于缺少的字符数,其他字符填充随机数。
比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6个字节,则可能补全为{1,2,3,4,5,a,b,c,d,e,5,c,3,G,$,6}
需要注意的是AES在加密和解密使用的填充方式必须相同。
3.模式
AES的工作模式,体现在把明文块加密成密文块的处理过程中。AES加密算法提供了五种不同的工作模式:
ECB模式(默认):
电码本模式 Electronic Codebook Book
CBC模式:
密码分组链接模式 Cipher Block Chaining
CTR模式:
计算器模式 Counter
CFB模式:
密码反馈模式 Cipher FeedBack
OFB模式:
输出反馈模式 Output FeedBack
同样加密和机密采用的模式也必须相同。
AES加密原理
在这里我们重新梳理一下:
1.把明文按照128bit拆分成若干个明文块。
2.按照选择的填充方式来填充最后一个明文块。
3.每一个明文块利用AES加密器和密钥,加密成密文块。
4.拼接所有的密文块,成为最终的密文结果。
那么,到底AES加密器怎么对单个明文快加密的呢?对于我么来讲,依然是个禁区。那么,我们今天就解开它的神秘面纱,烧脑时刻:
每个明文块都需要多次加密,那么要分多少轮合适呢?
初始轮(Initial Round) 1次
普通轮(Rounds) N次
最终轮(Final Round) 1次
AES的Key支持三种长度:AES128,AES192,AES256。Key的长度决定了AES加密的轮数。
除去初始轮,各种Key长度对应的轮数如下:
AES128:10轮
AES192:12轮
AES256:14轮
不同阶段的Round有不同的处理步骤。
初始轮只有一个步骤:
加轮密钥(AddRoundKey)
普通轮有四个步骤:
字节代替(SubBytes)
行移位(ShiftRows)
列混淆(MixColumns)
加轮密钥(AddRoundKey)
最终轮有三个步骤:
字节代替(SubBytes)
行移位(ShiftRows)
加轮密钥(AddRoundKey)
看下面图示:
字节替代
首先需要说明的是,16字节的明文块在每一个处理步骤中都被排列成4X4的二维数组。
所谓字节替代,就是把明文块的每一个字节都替代成另外一个字节。替代的依据是什么呢?依据一个被称为S盒(Subtitution Box)的16X16大小的二维常量数组。
假设明文块当中a[2,2] = 5B(一个字节是两位16进制),那么输出值b[2,2] = S[5][11]。
行移位(ShiftRows)
这一步很简单,就像图中所描述的:
第一行不变
第二行循环左移1个字节
第三行循环左移2个字节
第四行循环左移3个字节
列混淆(MixColumns)
这一步,输入数组的每一列要和一个名为修补矩阵(fixed matrix)的二维常量数组做矩阵相乘,得到对应的输出列。
加轮密钥(AddRoundKey)
这一步是唯一利用到密钥的一步,128bit的密钥也同样被排列成4X4的矩阵。
让输入数组的每一个字节a[i,j]与密钥对应位置的字节k[i,j]异或一次,就生成了输出值b[i,j]。
需要补充一点,加密的每一轮所用到的密钥并不是相同的。这里涉及到一个概念:扩展密钥(KeyExpansions)。
扩展密钥(KeyExpansions)
AES源代码中用长度 4* 4 *(10+1) 字节的数组W来存储所有轮的密钥。W{0-15}的值等同于原始密钥的值,用于为初始轮做处理。
后续每一个元素W[i]都是由W[i-4]和W[i-1]计算而来,直到数组W的所有元素都赋值完成。
W数组当中,W{0-15}用于初始轮的处理,W{16-31}用于第1轮的处理,W{32-47}用于第2轮的处理 ......一直到W{160-175}用于最终轮(第10轮)的处理。
而解密即加密的逆过程,最终轮->普通轮->初始轮,扩展密匙也相反。
AES的模式在加解密中的运用
前文知道AES有5中模式,那么他们是怎么工作的?
由于篇幅原因,我们先挑两种模式说一下,ECB,CBC模式
1.ECB,即电码本模式,是最简单的工作模式,在该模式下,每一个明文块的加密都是完全独立,互不干涉的
优点:简单,可并行计算,提高加密效率。缺点:相同的明文块经过加密会变成相同的密文块,因此安全性较差
2.CBC模式
CBC模式(Cipher Block Chaining)引入了一个新的概念:初始向量IV(Initialization Vector)。
IV是做什么用的呢?它的作用和MD5的“加盐”有些类似,目的是防止同样的明文块始终加密成同样的密文块。
从图中可以看出,CBC模式在每一个明文块加密前会让明文块和一个值先做异或操作。IV作为初始化变量,参与第一个明文块的异或,后续的每一个明文块和它前一个明文块所加密出的密文块相异或。
这样以来,相同的明文块加密出的密文块显然是不一样的。
CBC模式的好处是什么呢?
安全性更高
坏处也很明显:
1.无法并行计算,性能上不如ECB
2.引入初始化向量IV,增加复杂度
至于其他的模式,本文不再过多讲解,有兴趣的可以借助互联网或者书本深入了解。
开源工具
在java的javax.crypto包有很好用的封装哦,不需要额外的jar包支持。
java 代码示例:
加密步骤:
* 1.构造密钥生成器 * 2.根据ecnodeRules规则初始化密钥生成器 * 3.产生密钥 * 4.创建和初始化密码器 * 5.内容加密 * 6.返回字符串
代码示例:
几点补充:
1.我们在调用封装好的AES算法时,表面上使用的Key并不是真正用于AES加密解密的密钥,而是用于生成真正密钥的“种子”。
2.填充明文时,如果明文长度原本就是16字节的整数倍,那么除了NoPadding以外,其他的填充方式都会填充一组额外的16字节明文块。
解密:
1.同加密1-4步 * 2.将加密后的字符串反纺成byte[]数组 * 3.将加密内容解密
代码示例:
注意:上述代码使用Base64进行了编码和解码,避免个别字符超出ASCII的范围出现乱码现象方便日志或者控制台查看。
- 上一篇:对称加密——DES、3DES、AES使用
- 下一篇:典型加密算法:AES与RSA加密
相关推荐
- 怎样解除自动关机模式(怎样解除自动开关机)
-
1、打开手机主界面,找到系统自带的“时钟”应用,点击打开它。2、点击进入时钟后,点击右下角的“计时器”。3、进入到计时器后,点击“在计时结束启用雷达”这个选项。4、然后在这里,下拉到最下面,勾选“停...
- 电脑最高配置是什么配置2025
-
一,2023最新主流电脑装机配置如下。二,处理器可以使用十二代的i512400或者i512490f,内存16gb双通道,显卡rtx3060,主板可以使用b660m或者h610m。三,如果十三代酷睿...
- MySQL慢查询优化:从explain到索引,DBA手把手教你提升10倍性能
-
数据库性能是应用系统的生命线,而慢查询就像隐藏在系统中的定时炸弹。某电商平台曾因一条未优化的SQL导致订单系统响应时间从200ms飙升至8秒,最终引发用户投诉和订单流失。今天我们就来系统学习MySQL...
- 一文读懂SQL五大操作类别(DDL/DML/DQL/DCL/TCL)的基础语法
-
在SQL中,DDL、DML、DQL、DCL、TCL是按操作类型划分的五大核心语言类别,缩写及简介如下:DDL(DataDefinitionLanguage,数据定义语言):用于定义和管理数据库结构...
- 闲来无事,学学Mysql增、删,改,查
-
Mysql增、删,改,查1“增”——添加数据1.1为表中所有字段添加数据1.1.1INSERT语句中指定所有字段名语法:INSERTINTO表名(字段名1,字段名2,…)VALUES(值1...
- 数据库:MySQL 高性能优化规范建议
-
数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用MySQL保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,...
- 下载工具合集_下载工具手机版
-
迅雷,在国内的下载地位还是很难撼动的,所需要用到的地方还挺多。缺点就是不开会员,软件会限速。EagleGet,全能下载管理器,支持HTTP(S)FTPMMSRTSP协议,也可以使用浏览器扩展检测...
- mediamtx v1.15.2 更新详解:功能优化与问题修复
-
mediamtxv1.15.2已于2025年10月14日发布,本次更新在功能、性能优化以及问题修复方面带来了多项改进,同时也更新了部分依赖库并提升了安全性。以下为本次更新的详细内容:...
- 声学成像仪:泄露监测 “雷达” 方案开启精准防控
-
声学成像仪背景将声像图与阵列上配装的摄像实所拍的视频图像以透明的方式叠合在一起,就形成了可直观分析被测物产生状态。这种利用声学、电子学和信息处理等技术,变换成人眼可见的图像的技术可以帮助人们直观地认识...
- 最稳存储方案:两种方法将摄像头接入威联通Qu405,录像不再丢失
-
今年我家至少被4位邻居敲门,就是为了查监控!!!原因是小区内部监控很早就停止维护了,半夜老有小黄毛掰车门偷东西,还有闲的没事划车的,车主损失不小,我家很早就配备监控了,人来亮灯有一定威慑力,不过监控设...
- 离岗检测算法_离岗检查内容
-
一、研发背景如今社会许多岗位是严禁随意脱离岗位的,如塔台、保安室、监狱狱警监控室等等,因为此类行为可能会引起重大事故,而此类岗位监督管理又有一定困难,因此促生了智能视频识别系统的出现。二、产品概述及工...
- 消防安全通道占用检测报警系统_消防安全通道占用检测报警系统的作用
-
一、产品概述科缔欧消防安全通道占用检测报警系统,是创新行业智能监督管理方式、完善监管部门动态监控及预警预报体系的信息化手段,是实现平台远程监控由“人为监控”向“智能监控”转变的必要手段。产品致力于设...
- 外出住酒店、民宿如何使用手机检测隐藏的监控摄像头
-
最近,一个家庭在他们的民宿收到了一个大惊喜:客厅里有一个伪装成烟雾探测器的隐藏摄像头,监视着他们的一举一动。隐藏摄像头的存在如果您住在酒店或民宿,隐藏摄像头不应再是您的担忧。对于民宿,房东应报告所有可...
- 基于Tilera众核平台的流媒体流量发生系统的设计
-
曾帅,高宗彬,赵国锋(重庆邮电大学通信与信息工程学院,重庆400065)摘要:设计了一种基于Tilera众核平台高强度的流媒体流量发生系统架构,其主要包括:系统界面管理模块、服务承载模块和流媒体...
- 使用ffmpeg将rtsp流转流实现h5端播放
-
1.主要实现rtsp转tcp协议视频流播放ffmpeg下载安装(公认业界视频处理大佬)a、官网地址:www.ffmpeg.org/b、gitHub:github.com/FFmpeg/FFmp…c、推...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
