运行模式:
填充模式:
密钥长度:
密钥:
明文格式:
密文格式:
AES (Advanced Encryption Standard)

是取代其前任标准(DES)而成为新标准的一种对称密码算法。全世界的企业和密码学家提交了多个对称密码算法作为AES的候选,最终在2000年从这些候选算法中 选出了一种名为Rijindael的对称密码算法,并将其确定为了AES。

AES 的加密和解密

和 DES —样,AES 算法也是由多个轮构成的,其中每一轮分为 SubBytes、ShiftRows、MixColumns 和 AddRoundKey 共 4 个步骤。DES 使用 Feistel 网络作为其基本结构,而 AES 没有使用 Feistel 网络,而是使用了 SPN 结构。

AES 的输入分组为 128 比特,也就是 16 字节。首先,需要逐个字节地对 16 字节的输入数据进行 SubBytes 处理。所谓 SubBytes,就是以每个字节的值(0 ~ 255 的任意值)为索引, 从一张拥有 256 个值的替换表(S-BOX)中查找出对应值的处理。也就是说,要将一个 1 字节的值替换成另一个 1 字节的值。下图为 4 x 4=16 字节的数据中通过 S-Box 替换 1 字节的情形。

SubBytes 之后需要进行 ShiftRows 处理。这一步是将以 4 字节为单位的行(row)按照一定的规则向左平移,且每一行平移的字节数是不同的。下图为 ShiftRows 中对其中一行进行处理的情形。

ShiftRows 之后需要进行 MixColumns 处理。这一步是对一个 4 字节的值进行比特运算,将其变为另外一个 4 字节值。下图为 MixColumns 中对其中一列(column)进行处理的情形。

最后,需要将 MixColumns 的输出与轮密钥进行 XOR,即进行 AddRoundKey 处理。下图为 AddRoundlCey 中对其中 1 个字节进行处理的情形。到这里,AES 的一轮就结束了。 实际上,在 AES 中需要重复进行 10 ~ 14 轮计算。

通过上面的结构我们可以发现输人的所有比特在一轮中都会被加密。和每一轮都只加密一半输入的比特的 Feistel 网络相比,这种方式的优势在于加密所需要的轮数更少。此外,这种方式还有一个优势,即 SubBytes、 ShiftRows 和 MixColumns 可以分别以字节、行和列为单位进行并行计算。

在 AES 的加密过程中,每一轮所进行的处理为:

SubBytes --> ShiftRows --> MixColumns --> AddRoundKey

而在解密时,则是按照相反的顺序来进行的,即:

AddRoundKey --> InvMixColumns --> InvShiftRows --> InvSubBytes

其中,AddRoundKey 是与轮密钥进行 XOR 运算,因此这一步在加密和解密时是完全相同的,剩下的步骤中名字前面都带有 Inv,这表示与原始步骤相对应的逆运算。下为解密处理的情形。




运行模式

详情请见:对称密码介绍——分组密码的模式。
填充模式

  • None: 不填充
  • PKCS7: 填充字符串由一个字节序列组成,每个字节填充该字节序列的长度
  • Zeros: 填充字符串由设置为零的字节组成
  • ANSIX923: 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节均填充数字零
  • ISO10126: 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节填充随机数据

密钥(偏移)

  • Text: 表示是文本格式,加密前会使用 UTF-8 编码,把它转成 byte[] 数组
  • Hex 表示是十六进制格式,加密前会把十六进制字符串转成 byte[] 数组
+