Python中使用pycryptodome实现AES CBC与ECB加密详解

Miles
Miles
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍如何在Python中利用pycryptodome库实现AES加密。涵盖ECB、CBC等五种模式的安全性对比,重点推荐CBC模式。提供Windows和Linux环境下的库安装命令,并给出CBC和ECB模式的完整Python代码示例,包括密钥、IV处理及加解密逻辑,帮助开发者快速掌握AES加密在Python中的应用。

AES加密模式概述与安全性建议

AES加密算法主要包含五种工作模式:ECB、CBC、CTR、CFB以及OFB。

在安全性方面,强烈推荐使用CBC模式进行加密操作。

环境安装指南

在Windows系统环境下,可通过执行命令 pip install pycryptodome 来安装所需的加密库。

在Linux系统环境下,建议通过执行命令 pip install pycrypto 进行安装(注:原文如此,实际开发中pycryptodome更为常用且兼容性好)。

使用CBC模式进行加密时,必须同时提供长度为16字节的key(密钥)和长度为16字节的iv(初始化向量,即偏移量)。

相比之下,ECB模式在加密过程中不需要使用iv(偏移量)。

AES CBC模式Python实现

以下是AES CBC模式在Python中的具体实现代码。


from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

# 如果text不足十六位的倍数用空格补充
def add_to_16(text):
  if len(text.encode('utf8')) % 16:
    add = 16 - (len(text.encode('utf8')) % 16)
  else:
    add = 0
  text = text + '\0' * add
  return text

# 加密
def encrypt(text):
  key = '9999999999999999'.encode('utf8')
  mode = AES.MODE_CBC
  iv = b'qqqqqqqqqqqqqqqq'
  text = add_to_16(text)
  cryptos = AES.new(key, mode, iv)
  cipher_text = cryptos.encrypt(text)
  # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
  return b2a_hex(cipher_text)

# 解密后去掉空格
def decrypt(text):
  key = '9999999999999999'.encode('utf8')
  mode = AES.MODE_CBC
  iv = b'qqqqqqqqqqqqqqqq'
  cryptos = AES.new(key, mode, iv)
  plain_text = cryptos.decrypt(a2b_hex(text))
  return bytes.decode(plain_text).rstrip('\0')

if __name__ == '__main__':
  a = encrypt('hello')
  b = decrypt(a)
  print('加密', a)
  print('解密', b)

AES ECB模式Python实现

接下来展示AES ECB模式的加密实现,该模式无需指定偏移量iv。


from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

# 如果text不足十六位的倍数用空格补充
def add_to_16(text):
  if len(text.encode('utf8')) % 16:
    add = 16 - (len(text.encode('utf8')) % 16)
  else:
    add = 0
  text = text + '\0' * add
  return text

# 加密
def encrypt(text):
  key = '9999999999999999'.encode('utf8')
  mode = AES.MODE_ECB
  text = add_to_16(text)
  cryptos = AES.new(key, mode)
  cipher_text = cryptos.encrypt(text)
  # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
  return b2a_hex(cipher_text)

# 解密后去掉空格
def decrypt(text):
  key = '9999999999999999'.encode('utf8')
  mode = AES.MODE_ECB
  cryptos = AES.new(key, mode)
  plain_text = cryptos.decrypt(a2b_hex(text))
  return bytes.decode(plain_text).rstrip('\0')

if __name__ == '__main__':
  a = encrypt('hello')
  b = decrypt(a)
  print('加密', a)
  print('解密', b)

至此,关于Python使用encrypt库实现AES加密的实例详解已完成。如需了解更多相关Python encrypt实现AES加密的内容,建议搜索本站历史文章或参考下方的相关文章,感谢大家的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。