### AES 算法原理

AES 的核心概念

在深入原理之前，需要先了解 AES 的几个基本概念：

- 分组加密：AES 是一种分组密码，它将明文数据分割成固定大小的数据块（block）进行加密。AES 的数据块大小固定为 128 位
- 密钥长度：AES 支持三种密钥长度：128 位、192 位和 256 位。密钥长度越长，加密强度越高，但计算量也会相应增加
- 加密轮数：加密过程由一系列重复的“轮”（rounds）组成。不同的密钥长度对应不同的轮数：
  - 128 位密钥：10 轮
  - 192 位密钥：12 轮
  - 256 位密钥：14 轮

加密过程的四大步骤

每一次加密轮都由四个基本操作构成，这些操作保证了加密过程的复杂性

1. 字节替换（SubBytes） 这是代换操作。AES 使用一个预先定义好的 S-Box（Substitution-Box），将数据块中的每个字节替换成 S-Box 中对应的另一个字节。这个操作是非线性的，目的是为了隐藏明文和密文之间的直接代数关系
2. 行移位（ShiftRows） 这是置换操作。它将数据块中的每一行进行循环左移。具体来说：
   - 第 0 行保持不变
   - 第 1 行循环左移 1 个字节
   - 第 2 行循环左移 2 个字节
   - 第 3 行循环左移 3 个字节。 这个操作实现了数据字节在不同列之间的扩散，增加了密码的混淆程度
3. 列混淆（MixColumns） 这也是置换操作。这个步骤对每一列进行矩阵乘法运算。通过这个操作，每一列中的每个字节都会影响到该列中其他字节的值。这进一步加大了数据的扩散，确保了明文中的微小变化能够导致密文的巨大变化
4. 轮密钥加（AddRoundKey） 这是异或（XOR）操作。在每一轮开始时，都会将当前数据块与本轮的密钥进行异或运算。这个操作将密钥信息注入到数据中，是整个加密过程的关键步骤。每一轮使用的密钥都是由初始密钥经过密钥扩展算法生成的

这四个步骤按顺序重复执行多次，最后在最后一轮会省略列混淆步骤。解密过程则反向执行这四个步骤