AES加密
高级加密标准(AES,Advanced Encryption Standard)是一种对称密钥加密算法,用于保护敏感信息。它取代了原先的数据加密标准(DES),因为DES已经不再被认为足够安全
密钥是AES算法实现加密和解密的根本,对称加密对明文的加密和解密需要使用同一个密钥
AES支持三种长度的密钥:128位,192位,256位,对应AES128,AES192,AES256
填充
AES算法在对明文加密的时候,并不是把整个明文一股脑加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit,这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密结果
基本步骤
1、填充分组:
AES算法在对明文加密的时候,并不是把整个明文一股脑加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit,这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密结果
填充涉及以下三种填充模式:
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}
2、密钥扩展:
密钥扩展是AES算法中的一个关键步骤,它负责将初始密钥扩展为每轮加密所需的轮密钥也叫子密钥(Round Keys)。AES支持三种密钥长度:128位、192位和256位,密钥扩展的细节会根据不同的密钥长度有所不同
密钥扩展的基本思想是利用初始密钥生成一系列的轮密钥,这些轮密钥将在加密的每一轮中与状态矩阵进行异或运算。密钥扩展包括以下主要步骤:
-
轮常量生成(Round Constants): 针对每一轮,生成一个固定的常量,用于与某一部分扩展密钥进行异或。
-
子密钥生成(Key Schedule): 将初始密钥分割成多个字,并对这些字进行一系列变换,生成每一轮所需的轮密钥。这个过程包括:
-
初始轮密钥生成: 将初始密钥的字直接作为初始轮密钥。
-
后续轮密钥生成: 初始轮密钥后面的每个字都通过一系列的变换生成。这个过程涉及字的旋转、S盒替代和与轮常量的异或运算。
-
不同密钥长度下,轮密钥的生成步骤和数量会有所不同。例如,128位密钥生成10轮的轮密钥,192位密钥生成12轮的轮密钥,256位密钥生成14轮的轮密钥。
密钥扩展的目的是引入密钥的复杂性,使得加密算法更加强大。它确保了每一轮加密使用的密钥都是唯一的,并且与初始密钥之间存在一定的复杂关系,提高了算法的安全性
3、初始轮加密(Initial Round):
在第一轮中,将明文与轮密钥进行异或运算。
4、多轮加密:
除了最后一轮,其余每一轮都包括四个步骤:SubBytes、ShiftRows、MixColumns、AddRoundKey。
-
SubBytes: 这一步骤是通过一个称为S盒(Substitution Box)的查找表进行的。S盒是一个16×16的字节替代表,用于将输入的每个字节替换为预定义的字节。S盒的目的是引入非线性,增强算法的安全性。S盒中的元素是经过数学运算选定的,确保了一定的代替性和扩散性
-
ShiftRows: 这一步骤涉及对AES状态矩阵的行进行位移操作。状态矩阵是一个4×4的字节矩阵,存储了输入数据。ShiftRows的目的是在不改变列的顺序的情况下,对状态矩阵的每一行进行循环左移。具体地:
-
第1行不动。
-
第2行左移1字节。
-
第3行左移2字节。
-
第4行左移3字节。
-
-
MixColumns: 这一步骤对状态矩阵的每一列进行混淆操作。MixColumns使用一个特定的矩阵乘法,将每一列映射成一个新的列。这个步骤的目的是增加算法的混淆性质
-
AddRoundKey: 在每一轮中,状态矩阵都与该轮的轮密钥进行异或操作。轮密钥是通过密钥扩展算法生成的
5、最后一轮
最后一轮没有MixColumns步骤,只包含SubBytes、ShiftRows、AddRoundKey。
6、加密完成:
经过多轮加密后,得到密文
AES算法是一个迭代的、对称的加密算法,其安全性依赖于选择的密钥长度。目前,128位的AES密钥仍然被认为足够安全,但对于更高级的安全需求,可以考虑使用192位或256位的密钥。 AES是一种快速、高效的加密算法,被广泛应用于安全通信和数据存储领域
标签:AES,加密,字节,生成,密钥,明文 From: https://www.cnblogs.com/yogayao/p/17864976.html