Python 3.6 使用 pyCryptodome 实现 AES 加密解密
本文介绍如何在 Python 3.6 环境中使用 pyCryptodome 库实现 AES 加密与解密。文章详细说明了安装步骤,解决了 pycrypto 库停止维护及编译报错的问题,并提供了基于 ECB 模式的完整加解密代码示例,包括密钥填充、内容加密及解密验证过程。
环境准备与库安装
在 Python 3.6 环境下进行 AES 加密开发,推荐使用 pyCryptodome 第三方库。由于前代库 pyCyrpto 已停止维护,直接使用 pip install pycrypto 安装时,常因缺少微软 2014 工具环境而报错。因此,建议直接安装其后续分支 pyCryptodome。
安装命令如下:
pip install pycryptodome此外,若需通过特定渠道获取,也可访问 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应版本的安装包,并通过 pip 命令进行安装。

AES 加密解密实现
以下代码展示了如何使用 pyCryptodome 库中的 AES 模块进行加密和解密操作。代码采用 ECB 模式,并处理了密钥和内容的长度填充问题。
#AES-demo
"""
@author: sy
@file: python_AES.py
@time: 2017/12/12 09:10
@desc: AES加密
"""
from Crypto.Cipher import AES
#秘钥,此处需要将字符串转为字节
key = b'abcdefgh'
#加密内容需要长达16位字符,所以进行空格拼接
def pad(text):
while len(text) % 16 != 0:
text += b' '
return text
#加密秘钥需要长达16位字符,所以进行空格拼接
def pad_key(key):
while len(key) % 16 != 0:
key += b' '
return key
#进行加密算法,模式ECB模式,把叠加完16位的秘钥传进来
aes = AES.new(pad_key(key), AES.MODE_ECB)
#加密内容,此处需要将字符串转为字节
text = b'woshijiamineirong'
#进行内容拼接16位字符后传入加密类中,结果为字节类型
encrypted_text = aes.encrypt(pad(text))
print(encrypted_text)
#此处是为了验证是否能将字节转为字符串后,进行解密成功
#实际上a 就是 encrypted_text ,也就是加密后的内容
a = b'\xb9K\xe8_.q\x1c!\x9f\xa2\xc8\x06\xf5\xc1\xd07'
#用aes对象进行解密,将字节类型转为str类型,错误编码忽略不计
de = str(aes.decrypt(a),encoding='utf-8',errors="ignore")
#获取str从0开始到文本内容的字符串长度。
print(de[:len(text)])代码逻辑解析
在实现过程中,需要注意以下几个关键点:
- 字节处理:AES 加密要求输入为字节类型。因此,字符串形式的密钥(如
b'abcdefgh')和内容(如b'woshijiamineirong')需直接以字节形式传入。 - 长度填充:AES 算法要求加密内容的长度必须是 16 的倍数。代码中通过
pad函数在内容末尾补充空格,直至长度满足要求。同样,密钥长度也需通过pad_key函数填充至 16 位。 - 加密结果:加密后的结果为字节形式(如
b'\xb9K\xe8_.q\x1c!\x9f\xa2\xc8\x06\xf5\xc1\xd07')。 - 解密验证:解密时,使用相同的 AES 对象对加密后的字节进行解密。由于解密结果仍为字节类型,需将其转换为字符串。代码中使用
str()函数并指定encoding='utf-8'和errors="ignore"来处理可能的编码问题,最后截取原始内容长度以验证解密正确性。
以上就是 Python 3.6 使用 pyCryptodome 实现 AES 加密解密的详细内容,更多关于 Python 数据加密与解密的技术资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









