Skip to content

AES基本介绍

字数
1123 字
阅读时间
5 分钟

AES概述

AES(Advanced Encryption Standard)是一种对称加密算法,适用于电子数据的加密。它由美国国家标准与技术研究所(NIST)在2001年采用,取代了原来的DES标准。AES具有高效性、安全性和灵活性,是目前广泛应用的加密标准。

AES的基本特点

  • 对称加密:加密和解密使用相同的密钥。
  • 块加密:以固定大小(128位,即16字节)的数据块为单位进行加密。
  • 支持不同密钥长度:AES支持128位、192位和256位密钥长度(常用的是128位)。
  • 基于轮操作:加密和解密分为多轮,每轮由几个步骤组成。

AES加密过程

AES的加密分为以下主要步骤:

  1. 初始密钥添加(AddRoundKey)

    • 初始状态矩阵(State)与密钥矩阵进行按位异或(XOR)操作。
  2. 轮操作(Rounds)

    • 每轮包含以下步骤:
      • SubBytes:字节替代,将状态矩阵中的每个字节通过S盒(替换表)进行替换。
      • ShiftRows:行移位,状态矩阵的每一行循环左移不同的位数。
      • MixColumns:列混合,对每列数据进行数学变换(矩阵乘法)。
      • AddRoundKey:将状态矩阵与当前轮的子密钥进行按位异或。
  3. 最终轮(Final Round)

    • 不执行MixColumns,仅进行SubBytes、ShiftRows和AddRoundKey。

AES解密过程

AES解密是加密的逆过程,包括:

  1. 初始密钥添加(AddRoundKey)
  2. 逆轮操作(Inverse Rounds)
    • InvShiftRows:逆行移位,状态矩阵的每一行循环右移不同的位数。
    • InvSubBytes:逆字节替代,使用逆S盒还原字节。
    • InvMixColumns:逆列混合,使用逆变换还原每列数据。
    • AddRoundKey
  3. 最终逆轮(Final Inverse Round)
    • 不执行InvMixColumns。

举例说明AES加密和解密过程

场景:加密字符串 "HELLO AES!",使用128位密钥 0x2b7e151628aed2a6abf7158809cf4f3c

1. 数据准备

  • 原始数据:
    • "HELLO AES!" 转换为ASCII码并填充到16字节(块大小):[0x48, 0x45, 0x4c, 0x4c, 0x4f, 0x20, 0x41, 0x45, 0x53, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
  • 密钥:0x2b7e151628aed2a6abf7158809cf4f3c

2. 状态矩阵初始化

将数据和密钥分别加载为4x4矩阵:

  • 状态矩阵(State):

    48 45 4c 4c
    4f 20 41 45
    53 21 00 00
    00 00 00 00
  • 密钥矩阵:

    2b 7e 15 16
    28 ae d2 a6
    ab f7 15 88
    09 cf 4f 3c

3. 加密过程

(1)初始密钥添加(AddRoundKey)
状态矩阵与密钥矩阵按位异或(XOR):

State XOR Key:
7b 3b 59 5a
67 8e 93 e3
f8 d6 15 88
09 cf 4f 3c

(2)10轮迭代(以第1轮为例)

  1. SubBytes(字节替代):
    用S盒替换矩阵中的每个字节。例如:

    输入字节:0x7b → S盒替换为:0x62
    替换后:
    62 xx xx xx
    xx xx xx xx
    ...
  2. ShiftRows(行移位):
    第2行循环左移1个字节,第3行循环左移2个字节,第4行循环左移3个字节。

    行移位后:
    62 ?? ?? ??
    ?? ?? ?? ??
    ...
  3. MixColumns(列混合):
    每列通过特定的矩阵乘法运算进行混合。例如:

    输入列:[62, xx, xx, xx] → 输出列:[yy, yy, yy, yy]
  4. AddRoundKey(添加子密钥):
    当前状态矩阵与该轮的子密钥按位异或。

重复上述步骤共9轮。

(3)最终轮
只执行SubBytes、ShiftRows和AddRoundKey。

4. 解密过程

加密过程的逆过程。主要步骤是:

  1. 使用子密钥从最后一轮开始逐步还原。
  2. 替换顺序:
    • InvShiftRows → InvSubBytes → AddRoundKey → InvMixColumns。

5. 输出结果

  • 加密后得到密文,例如:[0x39, 0x25, 0x84, 0x1d, ...]
  • 解密后还原为原始明文:"HELLO AES!"

总结

AES的设计基于数学理论,包含多个复杂变换,使得即使原文和密钥有很小的差异,密文也会完全不同。AES是目前国际上推荐的对称加密算法,广泛应用于银行交易、无线通信、VPN等领域。

贡献者

The avatar of contributor named as freeway348 freeway348

文件历史

撰写