AES(Advanced Encryption Standard,高级加密标准)一种对称密钥加密算法,意味着加密和解密使用相同的密钥。这种加密方式在效率上优于非对称加密(如RSA)但密钥分发和管理成为挑战。
AES密钥是用于AES对称加密算法的核心机密数据。
基本概念
- 定义:AES密钥是一串特定长度的二进制数据,用于加密和解密信息
- 标准:由NIST于2001年确立,取代旧的DES加密标准
- 对称性:加密和解密使用同一个密钥(对称加密)
密钥规格
- 密钥长度(决定安全强度):
-
- AES-128:128位(16字节)
- AES-192:192位(24字节)
- AES-256:256位(32字节)
- 密钥格式:
-
- 通常表示为16/24/32字节的二进制数据
- 也可用16/24/32个十六进制字符表示(如
2B7E151628AED2A6...) - 或以Base64等编码形式存储
密钥生成
- 安全生成方法:
-
- 使用密码学安全随机数生成器(CSPRNG)
- 密钥派生函数(如PBKDF2、HKDF)
- 硬件安全模块(HSM)生成
密钥用途
- 数据加密:
-
- 文件/磁盘加密
- 数据库字段加密
- 网络通信加密(如TLS)
- 安全协议:
-
- 安全启动(Secure Boot)
- 固件验证3
- 重要原则:
-
- 密钥≠密码(密钥应直接是随机数)
- 永远不要硬编码在源代码中
- 最小权限原则(按需分配密钥访问权)
使用 python 进行 AES 加解密
在Python中,你可以使用PyCryptodome或cryptography库来实现AES加密。
使用PyCryptodome
首先,确保安装了pycryptodome库:
pip install pycryptodome
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
def aes_encrypt(plaintext, key):
# 确保密钥长度为16(AES-128), 24(AES-192), 或 32(AES-256)字节
if len(key) not in (16, 24, 32):
raise ValueError("Key length must be 16, 24, or 32 bytes long")
# 生成随机初始化向量(IV)
iv = get_random_bytes(AES.block_size)
cipher = AES.new(key, AES.MODE_CBC, iv)
# 对明文进行填充以确保长度是块大小的倍数
padded_text = pad(plaintext.encode(), AES.block_size)
ciphertext = cipher.encrypt(padded_text)
# 返回包含IV和密文的元组
return iv + ciphertext
def aes_decrypt(ciphertext, key):
# 提取IV
iv = ciphertext[:AES.block_size]
cipher = AES.new(key, AES.MODE_CBC, iv)
# 解密并去除填充
padded_plaintext = cipher.decrypt(ciphertext[AES.block_size:])
plaintext = unpad(padded_plaintext, AES.block_size)
return plaintext.decode()
# 使用示例
key = get_random_bytes(32) # AES-256位密钥
plaintext = "Hello, World!"
ciphertext = aes_encrypt(plaintext, key)
decrypted_text = aes_decrypt(ciphertext, key)
print("Encrypted:", ciphertext)
print("Decrypted:", decrypted_text)
主流AES模式对比
|
模式 |
特点 |
适用场景 |
安全性风险 |
|
ECB(Electronic Codebook) 电子密码本模式 |
最简单的加密模式。 将明文分成块,每块独立加密。 块独立加密,无需IV |
简单数据分块处理 |
相同明文生成相同密文,易受重放攻击 |
|
CBC(Cipher Block Chaining) 密码块链接模式 |
每个明文块与前一个密文块异或后再加密。 需要初始化向量(IV)。 块链式加密。 |
文件加密、网络通信 |
需保证IV唯一性,否则可能被篡改 |
|
GCM(Galois/Counter Mode) 伽罗瓦/计数器模式 |
CTR模式的扩展 提供认证加密(AEAD) 支持认证加密,含完整性校验。 |
高安全性场景(如API、数据库) |
无常见漏洞,但实现较复杂 |
|
CTR(Counter) 计数器模式 |
将块密码变为流密码。 使用计数器值加密后与明文异或。 流加密模式,支持并行处理 |
实时数据流(如视频) |
计数器重复会导致密钥流复用 |
选择依据
- 安全性优先级
-
- 避免使用ECB模式(明文模式易泄露信息)14
- 推荐CBC(基础安全)或GCM(认证加密)68
- 数据特性
-
- 固定长度数据:CBC模式(需填充)36
- 流式数据:CTR或CFB模式(无需填充)8
- 性能需求
-
- GCM模式虽安全但计算开销较大,适合对延迟不敏感的场景68
- ECB/CBC在低配置设备中性能更优
|
模式 |
需要填充 |
并行加密 |
随机访问 |
认证加密 |
推荐指数 |
|
ECB |
是 |
是 |
是 |
否 |
❌ 绝不使用 |
|
CBC |
是 |
否 |
否 |
否 |
⭐⭐ 传统系统 |
|
CTR |
否 |
是 |
是 |
否 |
⭐⭐⭐ 性能敏感 |
|
GCM |
否 |
是 |
部分 |
是 |
⭐⭐⭐⭐ 首选 |
|
CCM |
否 |
否 |
否 |
是 |
⭐⭐⭐ 受限环境 |
|
XTS |
否 |
是 |
是 |
否 |
⭐⭐⭐ 存储加密 |
如有侵权请联系删除

被折叠的 条评论
为什么被折叠?



