AES加解密介绍

部署运行你感兴趣的模型镜像

AES(Advanced Encryption Standard,高级加密标准)一种对称密钥加密算法,意味着加密和解密使用相同的密钥。这种加密方式在效率上优于非对称加密(如RSA)但密钥分发和管理成为挑战。

AES密钥是用于AES对称加密算法的核心机密数据。

基本概念

  1. 定义:AES密钥是一串特定长度的二进制数据,用于加密和解密信息
  2. 标准:由NIST于2001年确立,取代旧的DES加密标准
  3. 对称性:加密和解密使用同一个密钥(对称加密)

密钥规格

  1. 密钥长度(决定安全强度):
    • AES-128:128位(16字节)
    • AES-192:192位(24字节)
    • AES-256:256位(32字节)
  1. 密钥格式
    • 通常表示为16/24/32字节的二进制数据
    • 也可用16/24/32个十六进制字符表示(如2B7E151628AED2A6...
    • 或以Base64等编码形式存储

密钥生成

  1. 安全生成方法
    • 使用密码学安全随机数生成器(CSPRNG)
    • 密钥派生函数(如PBKDF2、HKDF)
    • 硬件安全模块(HSM)生成

密钥用途

  1. 数据加密
    • 文件/磁盘加密
    • 数据库字段加密
    • 网络通信加密(如TLS)
  1. 安全协议
    • 安全启动(Secure Boot)
    • 固件验证3
  1. 重要原则
    • 密钥≠密码(密钥应直接是随机数)
    • 永远不要硬编码在源代码中
    • 最小权限原则(按需分配密钥访问权)

使用 python 进行 AES 加解密

在Python中,你可以使用PyCryptodomecryptography库来实现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) 计数器模式

将块密码变为流密码。

使用计数器值加密后与明文异或。

流加密模式,支持并行处理

实时数据流(如视频)

计数器重复会导致密钥流复用‌

选择依据

  1. 安全性优先级
    • 避免使用ECB模式(明文模式易泄露信息)‌14
    • 推荐CBC(基础安全)或GCM(认证加密)‌68
  1. 数据特性
    • 固定长度数据‌:CBC模式(需填充)‌36
    • 流式数据‌:CTR或CFB模式(无需填充)‌8
  1. 性能需求
    • GCM模式虽安全但计算开销较大,适合对延迟不敏感的场景‌68
    • ECB/CBC在低配置设备中性能更优‌

模式

需要填充

并行加密

随机访问

认证加密

推荐指数

ECB

❌ 绝不使用

CBC

⭐⭐ 传统系统

CTR

⭐⭐⭐ 性能敏感

GCM

部分

⭐⭐⭐⭐ 首选

CCM

⭐⭐⭐ 受限环境

XTS

⭐⭐⭐ 存储加密

如有侵权请联系删除

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值