文章目录
- DES与AES加密算法详解(原理、流程、对比、代码实现、面试题)
-
- 一、引言
- [二、DES 加密算法详解](#二、DES 加密算法详解)
-
- [1. 算法简介](#1. 算法简介)
- [2. 核心参数与特点](#2. 核心参数与特点)
- [3. DES S 盒](#3. DES S 盒)
- [4. 加密特性](#4. 加密特性)
- [5. 安全性](#5. 安全性)
- [三、AES 加密算法详解](#三、AES 加密算法详解)
-
- [1. 算法简介](#1. 算法简介)
- [2. 核心参数与特点](#2. 核心参数与特点)
- [3. AES S 盒](#3. AES S 盒)
- [4. 加密特性](#4. 加密特性)
- [5. AES 加密轮函数流程(重点)](#5. AES 加密轮函数流程(重点))
- [6. 安全性与应用场景](#6. 安全性与应用场景)
- [四、DES 与 AES 详细对比表](#四、DES 与 AES 详细对比表)
- 五、代码实现(Python)
-
- [1. AES 加密代码(推荐)](#1. AES 加密代码(推荐))
- [2. DES 加密代码(了解即可)](#2. DES 加密代码(了解即可))
- 六、常见面试题(高频)
- 七、总结
DES与AES加密算法详解(原理、流程、对比、代码实现、面试题)
一、引言
在信息安全与数据加密领域,对称加密算法是保障数据机密性、完整性的核心技术。
DES 和 AES 是对称分组加密中最具代表性的两种算法,其中 AES 已成为现代加密标准,广泛应用于网络传输、文件加密、数据库安全等场景。
本文从算法原理、核心结构、加密流程、对比总结、代码实现、常见面试题全方位讲解 DES 与 AES,适合软考、面试、学习总结使用。
二、DES 加密算法详解
1. 算法简介
DES(Data Encryption Standard,数据加密标准)是经典的对称分组加密算法,由 IBM 设计,曾作为美国联邦标准。随着计算能力提升,DES 已不再安全,被 AES 取代。
2. 核心参数与特点
- 加密类型:对称分组加密
- 分组长度:64 位
- 密钥长度:64 位 (8 位奇偶校验,有效密钥 56 位)
- 结构:Feistel 结构,16 轮迭代加密
- 加密方式:将明文分成 64 位一组,逐组加密后拼接成密文
3. DES S 盒
- DES 拥有 8 个 S 盒
- 每个 S 盒:6 比特输入 → 4 比特输出
- S 盒是 DES 唯一非线性部件,提供混淆性,提升抗破解能力
4. 加密特性
- 加密过程不引入随机数
- 相同明文 + 相同密钥 → 相同密文
- 属于确定性加密算法
5. 安全性
- 56 位有效密钥长度过短
- 可被暴力破解,已不满足现代安全需求
- 仅用于老旧兼容系统
三、AES 加密算法详解
1. 算法简介
AES(Advanced Encryption Standard,高级加密标准)是用来替代 DES 的新一代对称加密标准,具有安全性高、速度快、资源占用小等优点,是目前全球通用的对称加密算法。
2. 核心参数与特点
- 加密类型:对称分组加密
- 分组长度:固定 128 位(16 字节)
- 支持密钥长度:128 位、192 位、256 位
- 轮数:根据密钥长度不同,轮数不同
- 128 位密钥:10 轮
- 192 位密钥:12 轮
- 256 位密钥:14 轮
3. AES S 盒
- AES 使用单个 S 盒
- 映射关系:8 比特输入 → 8 比特输出
- 非线性度高,抗差分分析、线性分析能力强
4. 加密特性
- 加密过程不使用随机数
- 相同明文、相同密钥,每次加密结果一致
- 属于确定性加密算法
5. AES 加密轮函数流程(重点)
AES 一轮加密由 4 个基本操作组成:
-
字节代换(SubBytes)
- 使用 S 盒对每个字节进行非线性代换
- 作用:混淆,让明文与密文关系复杂
-
行移位(ShiftRows)
- 对矩阵的行进行循环左移
- 第 0 行不移位
- 第 1 行左移 1 字节
- 第 2 行左移 2 字节
- 第 3 行左移 3 字节
- 作用:扩散,让局部影响扩散到全局
-
列混淆(MixColumns)
- 对每一列进行线性变换
- 按矩阵运算重新计算每列 4 个字节
- 作用:进一步增强扩散性
-
轮密钥加(AddRoundKey)
- 当前状态与轮密钥进行异或(XOR)
- 作用:引入密钥参与,每轮密钥不同
初始轮:只执行 轮密钥加
最后一轮:不执行 列混淆
6. 安全性与应用场景
- 安全性极高,目前无有效破解方法
- 应用场景:
- HTTPS/TLS 加密
- WiFi 加密(WPA2/WPA3)
- 文件/磁盘加密
- 数据库加密
- 区块链、物联网设备加密
四、DES 与 AES 详细对比表
| 对比项 | DES | AES |
|---|---|---|
| 全称 | Data Encryption Standard | Advanced Encryption Standard |
| 加密类型 | 对称分组加密 | 对称分组加密 |
| 分组长度 | 64 位 | 128 位(16 字节) |
| 密钥长度 | 64 位(有效 56 位) | 128/192/256 位 |
| S 盒结构 | 6 输入 → 4 输出 | 8 输入 → 8 输出 |
| 轮函数结构 | Feistel 结构,16 轮 | 代换-置换结构,10/12/14 轮 |
| 加密特性 | 确定性加密,无随机数 | 确定性加密,无随机数 |
| 安全性 | 低,已被破解 | 高,当前国际标准 |
| 效率 | 软件实现较慢 | 软硬件效率都很高 |
| 适用场景 | 老旧 legacy 系统 | 现代所有主流安全场景 |
五、代码实现(Python)
1. AES 加密代码(推荐)
python
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import os
def aes_ecb_encrypt(plaintext: bytes, key: bytes):
"""AES-ECB 加密示例(仅教学使用)"""
cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=default_backend())
encryptor = cipher.encryptor()
return encryptor.update(plaintext) + encryptor.finalize()
if __name__ == '__main__':
key = os.urandom(16) # 128 位密钥
plaintext = b"HelloAES12345678" # 16字节
ciphertext = aes_ecb_encrypt(plaintext, key)
print("AES 加密结果(十六进制):", ciphertext.hex())
2. DES 加密代码(了解即可)
python
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
def des_ecb_encrypt(plaintext: bytes, key: bytes):
"""DES-ECB 加密示例(仅教学)"""
cipher = Cipher(algorithms.TripleDES(key), modes.ECB(), backend=default_backend())
encryptor = cipher.encryptor()
return encryptor.update(plaintext) + encryptor.finalize()
六、常见面试题(高频)
-
DES 和 AES 分别是什么加密?
都是对称分组加密算法。
-
AES 分组长度是多少?
固定 128 位(16 字节)。
-
AES 支持哪几种密钥长度?
128、192、256 位。 -
DES 有效密钥长度是多少?
56 位。 -
AES 的 S 盒是什么映射?
8 位输入 → 8 位输出。 -
DES 的 S 盒是什么映射?
6 位输入 → 4 位输出。 -
AES 一轮加密有哪几步?
字节代换、行移位、列混淆、轮密钥加。
-
AES 为什么比 DES 安全?
密钥更长、S 盒更安全、扩散混淆更强。
-
AES 是确定性加密吗?为什么?
是。不使用随机数,相同明文+密钥 → 相同密文。
-
实际项目中推荐用哪个?
AES,优先 AES-128 / AES-256。
七、总结
- DES 是早期对称分组加密代表,分组 64 位,有效密钥 56 位,S 盒 6→4,因安全性不足已被淘汰。
- AES 是当前主流对称加密标准,分组固定 128 位,密钥 128/192/256 位,S 盒 8→8,安全高效。
- AES 轮函数由 字节代换、行移位、列混淆、轮密钥加 四步组成,扩散与混淆能力极强。
- 两者均为分组对称加密、确定性加密,是考试与面试中的高频考点。