AES加密,在27安全访问以及一些文件加密是比较常见的加密方法。
AES(高级加密标准)是一种对称加密算法,其加密过程是基于 分组加密(block cipher)的,每次加密的单位是固定大小的 128 位数据块。AES 有三种不同的密钥长度:128 位、192 位和 256 位,每种密钥长度对应不同的加密轮数。具体的加密过程分为多个步骤,以下是基于 AES-128(即使用 128 位密钥)加密的详细流程。对于 AES-192 和 AES-256,加密流程类似,只是在轮数和密钥扩展上有所不同。
AES 加密流程
-
初始化:
-
明文数据:将明文数据分成 128 位(16 字节) 的数据块。如果明文长度不足 128 位,需要进行填充(如 PKCS7 填充)。 -
密钥:AES 的密钥长度为 128 位(16 字节),用于生成一系列轮密钥。
-
密钥扩展(Key Expansion):
-
在加密过程中,密钥会被扩展成一组密钥,这些密钥会在每一轮加密中使用。对于 AES-128,扩展后的密钥长度为 44 个 32 位字(即总共 176 字节)。扩展过程通过密钥调度算法(key schedule)生成每一轮的密钥。
-
初始轮(Initial Round):
-
AddRoundKey:初始数据块和第一轮的密钥进行异或操作。初始轮密钥从扩展密钥中提取。
-
主要轮(Main Rounds): 对于 AES-128,需要进行 10 轮加密操作。每一轮操作包括以下步骤:
-
SubBytes(字节替代):使用 S-Box(代替字节查找表)对数据块中的每一个字节进行替代。S-Box 是一个 16x16 的矩阵,将每个字节替换为一个新的字节。 -
ShiftRows(行移位):数据块中的 4 行被循环位移。第一行不变,第二行向左移 1 个字节,第三行向左移 2 个字节,第四行向左移 3 个字节。这增强了数据的扩散性。 -
MixColumns(列混合):每列的 4 个字节通过一个固定的数学操作进行混合,这进一步增强了数据的扩散性。具体的计算使用有限域 GF(2^8) 来进行。 -
AddRoundKey:将当前数据块与相应轮的密钥进行异或操作,得到加密后的数据。
-
最后一轮(Final Round): 最后一轮的操作与主要轮类似,但 没有 MixColumns 步骤,剩余的步骤如下:
-
SubBytes(字节替代):同样使用 S-Box 进行字节替代。 -
ShiftRows(行移位):同样进行行位移操作。 -
AddRoundKey:使用最后一轮密钥对数据进行异或操作,得到最终的密文。

每个步骤的详细描述:
-
AddRoundKey(轮密钥异或): - 将数据块与轮密钥进行异或操作。这是加密中的关键步骤,每一轮的密钥都会对数据进行更新。 -
SubBytes(字节替代): - 用 S-Box(替代字节查找表)对明文中的每个字节进行替代,提供非线性变换,增强加密的复