Python 中的 AES 加密功能

AES 加密的基本概念

AES(Advanced Encryption Standard)是一种对称加密算法,广泛应用于数据加密。它支持 128、192 和 256 位密钥长度,通常需要配合加密模式(如 CBC、ECB)和填充方式(如 PKCS7)使用。

安装必要的库

Python 中可以使用 pycryptodome 库实现 AES 加密。安装命令如下:

pip install pycryptodome

AES 加密示例代码

以下是一个完整的 AES 加密和解密示例,使用 CBC 模式和 PKCS7 填充:

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
import base64

# 加密函数
def aes_encrypt(plaintext, key):
    iv = get_random_bytes(16)  # 生成随机初始化向量
    cipher = AES.new(key, AES.MODE_CBC, iv)
    ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size))
    return base64.b64encode(iv + ciphertext).decode('utf-8')

# 解密函数
def aes_decrypt(ciphertext, key):
    data = base64.b64decode(ciphertext)
    iv = data[:16]  # 提取初始化向量
    ciphertext = data[16:]
    cipher = AES.new(key, AES.MODE_CBC, iv)
    plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size)
    return plaintext.decode('utf-8')

# 测试
key = get_random_bytes(32)  # 256 位密钥
plaintext = "Hello, AES!"
encrypted = aes_encrypt(plaintext, key)
decrypted = aes_decrypt(encrypted, key)

print("加密结果:", encrypted)
print("解密结果:", decrypted)

关键参数说明

  • 密钥长度:AES 支持 128、192 和 256 位密钥,分别对应 16、24 和 32 字节。
  • 初始化向量(IV):CBC 模式需要随机生成的 IV,长度与块大小(16 字节)一致。
  • 填充方式:PKCS7 是常用填充方式,确保数据长度是块大小的整数倍。

其他加密模式

除了 CBC,还可以使用其他模式如 ECB(不推荐)、GCM(带认证)等。例如 GCM 模式代码片段:

cipher = AES.new(key, AES.MODE_GCM)
ciphertext, tag = cipher.encrypt_and_digest(plaintext.encode('utf-8'))

注意事项

  • 密钥管理:密钥需要安全存储,避免硬编码在代码中。
  • 模式选择:ECB 模式不安全,推荐使用 CBC 或 GCM。
  • 数据编码:加密后的二进制数据通常需通过 Base64 编码转换为字符串。

通过以上代码和说明,可以快速实现 Python 中的 AES 加密功能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值