跳转至

AES 性能测试

zerodep AES 实现与 pycryptodome(C 扩展)的同条件性能对比。

测试环境

  • CPU: x86_64 Linux
  • Python: 3.12
  • 工具: pytest-benchmark 5.2.3(报告均值)
  • 对标库: pycryptodome 3.23.0
  • 最后更新: 2026-04-21

实现对比

AES 模块已整合为单文件(aes.py),自动选择后端:当 libcrypto 可用时默认使用 OpenSSL(通过 ctypes);否则自动切换到纯 Python 后备方案。

实现 后端 类型
OpenSSL ctypes aes.py(默认) 通过 ctypes 调用系统 libcrypto
纯 Python aes.py(后备) 解释执行的 Python
pycryptodome (参考库) C 扩展

测试模式

模式 说明
ECB 电子密码本模式(PKCS7 填充)
CBC 密码块链接模式(PKCS7 填充)
CTR 计数器模式(无填充)
GCM Galois/Counter 模式(认证加密)

测试数据大小

标签 大小 说明
13 字节 短消息("Hello, World!"
1 KB 随机数据(os.urandom(1024)
64 KB 随机数据(os.urandom(64 * 1024)

ECB 加密(均值)

数据大小 纯 Python OpenSSL ctypes pycryptodome OpenSSL vs pycryptodome
13 B(小) ~82 us ~6.9 us ~9.0 us 1.3x 更快
1 KB(中) ~4,000 us ~7.6 us ~9.4 us 1.2x 更快
64 KB(大) ~250,000 us ~20.3 us ~21.3 us ~1.0x(持平)

ECB 解密(均值)

数据大小 纯 Python OpenSSL ctypes pycryptodome OpenSSL vs pycryptodome
13 B(小) ~109 us ~6.9 us ~9.5 us 1.4x 更快
1 KB(中) ~5,500 us ~7.5 us ~9.5 us 1.3x 更快
64 KB(大) ~340,000 us ~19.0 us ~21.4 us 1.1x 更快

CBC 加密(均值)

数据大小 纯 Python OpenSSL ctypes pycryptodome OpenSSL vs pycryptodome
13 B(小) ~85 us ~6.8 us ~10.0 us 1.5x 更快
1 KB(中) ~4,200 us ~7.5 us ~11 us 1.5x 更快
64 KB(大) ~260,000 us ~70 us ~115 us 1.6x 更快

CBC 解密(均值)

数据大小 纯 Python OpenSSL ctypes pycryptodome OpenSSL vs pycryptodome
13 B(小) ~110 us ~7 us ~10 us 1.4x 更快
1 KB(中) ~5,600 us ~7.5 us ~12 us 1.6x 更快
64 KB(大) ~350,000 us ~19.4 us ~133.7 us 6.9x 更快

CTR 加密(均值)

数据大小 纯 Python OpenSSL ctypes pycryptodome OpenSSL vs pycryptodome
13 B(小) ~84 us ~7 us ~11 us 1.6x 更快
1 KB(中) ~4,100 us ~7.5 us ~13 us 1.7x 更快
64 KB(大) ~255,000 us ~21 us ~100 us 4.8x 更快

GCM 加密(均值)

数据大小 纯 Python OpenSSL ctypes pycryptodome OpenSSL vs pycryptodome
13 B(小) ~250 us ~9.5 us ~56.6 us 6.0x 更快
1 KB(中) ~5,600 us ~10 us ~58 us 5.8x 更快
64 KB(大) ~350,000 us ~30 us ~160 us 5.3x 更快

GCM 解密(均值)

数据大小 纯 Python OpenSSL ctypes pycryptodome OpenSSL vs pycryptodome
13 B(小) ~248 us ~9.5 us ~60 us 6.3x 更快
1 KB(中) ~5,700 us ~10 us ~62 us 6.2x 更快
64 KB(大) ~350,000 us ~30.9 us ~165.0 us 5.3x 更快

要点总结

  • OpenSSL ctypes 是默认后端,稳定优于 pycryptodome 的 C 扩展:ECB/CBC 模式中小数据快 1.1--1.5 倍,大型 CBC 解密可达 6.9 倍。在 GCM 模式 下优势最为显著,达到 5.3--6.3 倍。且不需要任何 pip 依赖——只需系统安装 libcrypto
  • 纯 Python 后备方案对于小消息比 pycryptodome 慢约 10 倍,中大型数据慢 300--500 倍。这是解释执行 Python 与编译 C 之间的预期差距,仅在无原生库环境下作为最后手段。
  • GCM 模式 的纯 Python 实现包含 GF(2^128) 乘法运算,是最慢的纯 Python 模式(13 字节需 ~250 us,而 ECB/CBC 仅需 ~82--85 us)。OpenSSL 后端则没有此开销。
  • pycryptodome 速度较快(C 扩展),但需要通过 pip 安装编译依赖。在所有测试场景中 OpenSSL ctypes 均持平或更快。

自行运行

pip install pytest pytest-benchmark pycryptodome
pytest aes/test_aes_benchmark.py --benchmark-only -v

最新 CI 结果

每次发版时通过 Benchmark CI 自动更新。