希望文章能给到你启发和灵感~
如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏 支持一下博主吧~
开篇说明
加密中,我们常常会见到AES加密,那么什么是AES加密呢?在回答这个之前我们需要知道什么是对称加密算法;
一、基础环境说明
考虑环境因素,大家适当的对比自己的软硬件环境情况分析~请仔细阅读硬件、软件环境
1.1 硬件环境
MacOS Monterey 版本 12.6.8 Apple M1
1.2 软件环境
开发工具:Android Studio 2021.2.1
编译环境:Java 1.8.0_171
, Android SDK 的版本为 32
二、AES的基本概念
2.1 对称加密算法
官方一点的说明:AES加密,全称为Advanced Encryption Standard,即高级加密标准,是一种广泛使用的
对称加密算法
什么是对称加密算法?
对称加密算法是一种使用相同密钥进行加密和解密的加密技术
;
2.2 工作原理
加密过程:发送方使用密钥对明文(原始数据)进行加密处理,将其转换为难以直接阅读的密文形式。加密过程通常涉及将明文划分为固定长度的块,并通过密钥和加密算法将这些块转换成对应的密文块;
解密过程: 接收方收到密文后,使用相同的密钥和解密算法对密文进行解密处理,以恢复出原始的明文数据。解密过程与加密过程相反,将密文块还原为明文块。
2.3 优点
速度快、实现简单、 资源消耗少
对称加密算法通常具有较高的加密和解密速度,算法实现相对简单,易于实现。对系统性能影响小,适合大量数据
的处理。
2.4 缺点
他的缺点也比较明显,因为使用的是同一套密钥
来进行加解密,所以密钥保管分发的安全性就值得注意,一旦泄漏就不再安全;
对称加密算法需要事先共享密钥
,因此不适用于互联网等开放环境。在开放环境中,密钥的交换和分发存在被截获的风险
;
三、AES的特点
因为AES是对称加密算法的一种,所以除了继承了其对称加密,高安全性,易于实现的特点外,还
支持多种密钥长度
,并可进行分组加密
;
多种密钥长度:AES支持三种不同长度的密钥,分别是128位
、192位
和256位
。密钥长度越长,加密强度越高,但也会增加加密和解密的计算复杂性。
分组加密:AES是一种分组密码算法,将明文数据分成固定大小(128位,即16字节)的数据块进行处理。
3.1 工作流程
AES加密算法的加密过程可以简单的概括成几个步骤:
1、密钥扩展:将输入的密钥(128位、192位或256位)通过密钥扩展算法扩展成多个轮密钥,这些轮密钥将在后续的加密轮次中使用。
2、初始轮密钥加:将明文数据块与第一个轮密钥进行异或(XOR)操作。
3、多轮加密:重复进行多轮加密操作,每轮操作包括字节替换、行移位、列混淆(除最后一轮外)和轮密钥加四个步骤。这些步骤的组合使得AES算法能够有效地混淆和扩散输入数据,生成难以破解的密文。
4、输出密文:经过多轮加密后,输出加密后的密文数据块。
5、解密过程是加密过程的逆操作,通过相反的顺序执行逆操作来还原原始数据。
四、最后
以上的内容偏理论,可能看完我们还是会一头雾水,什么又密钥长度,128,256的,又什么轮密钥什么的;这里我用更直白一点的解释来说一下,大家比较常常有疑问的点:
一、【问】AES的三种密钥长度有啥用,为什么要有多种密钥长度?
【答】这里我们可以简单的理解为,密钥长度越长,我们的加密结果就会越安全
,所谓的长度分为128,192,256位这些,他其实代表着二进制位数的序列,你的值越大,意味着你的排列组合的结果就越多,我们的加密自然就安全,而为什么是这三个数,我们只需要知道,这是长期计算和经验得出的标准
即可;
二、【问】AES中为什么要用轮加密,加密的轮数就是对明文的重复加密的次数吗?
【答】轮加密的目的主要有两方面,一个是出于安全性
,让我们的加密过程更难被破解,一个是出于提高加密效率
,那什么是轮?所谓的一轮就是对明文进行一次复杂的变换的过程
,变换包括(字节替换(SubBytes)、行移位(ShiftRows)、列混合等等),所以加密多少轮并不是简单的对明文进行多次加密,而是进行多次的复杂加密;
三、【问】为什么轮加密有10轮,12轮,14轮,为什么这么定?
【答】不同长度的密钥对应不同的加密轮数,如AES-128需要10轮,AES-192需要12轮,AES-256需要14轮,这个对应关系我们只要知道即可,至于为什么是这个轮数,我们只需要知道,这个值是同时参考了安全性和效率的综合角度,而找到的平衡点;因为你的加密轮数越高越安全,但是复杂度也越高效率就会降低;
四、【问】什么是分组加密?
【答】AES中的分组加密,你可以简单的理解为一个蛋糕(明文)太大了,我们会将它进行切开分成好几份相同的大小块(按固定大小分组),这样好消化(好处理)