杰瑞科技汇

Python pycrypto安装失败怎么办?

重要提醒:pycrypto 已被废弃

你需要了解一个非常重要的背景信息:pycrypto 项目已经不再维护多年,并且存在已知的安全漏洞。

  • 不再维护:自 2025 年以来就没有发布过新版本。
  • 安全风险:其代码库中存在多个安全漏洞,使得它不再适合用于生产环境。

强烈建议不要在新项目中使用 pycrypto,你应该使用它的替代品,特别是 pycryptodome


为什么还要讲 pycrypto 的安装?

尽管 pycrypto 已被废弃,但你可能会在非常老旧的项目或遗留代码中遇到它,了解如何安装它有助于你维护这些旧系统,但请务必在修复安全漏洞后,尽快将项目迁移到新的库上。


pycrypto 的安装方法

pycrypto 的安装在不同操作系统上可能会遇到一些问题,尤其是在 Windows 上。

使用 pip (推荐尝试)

这是最简单的方法,适用于大多数情况。

pip install pycrypto

可能遇到的问题:

  • Windows 用户:在 Windows 上,pip install pycrypto 经常会失败,因为它需要编译 C 代码,而缺少必要的编译环境(如 Microsoft Visual C++ Build Tools)。
  • Linux/macOS 用户:如果系统缺少编译工具(如 gcc, make),安装也会失败,在 Debian/Ubuntu 上,你需要先安装 build-essential
    sudo apt-get update
    sudo apt-get install build-essential

    然后再尝试 pip install pycrypto

使用预编译的 Whl 文件 (解决 Windows 安装问题)

pip install 失败,最可靠的解决方案是下载与你 Python 版本和系统架构匹配的预编译包(.whl 文件)。

  1. 确定你的 Python 版本和系统架构

    • 打开命令行,运行 python --versionpython3 --version 查看你的 Python 版本(8.10)。
    • 运行 python -c "import platform; print(platform.architecture())" 查看你的系统架构(64bit32bit)。
  2. 下载 Whl 文件: 访问非官方的、社区维护的 PyPI 镜像网站,如 Christoph Gohlke's Unofficial Windows Binaries for Python Extension Packages,找到 pycrypto 并下载与你环境匹配的文件。

  3. 使用 pip 安载下载的文件: 假设你下载的文件是 pycrypto‑2.6.1‑cp38‑cp38‑win_amd64.whl(Python 3.8, 64位 Windows),并且文件保存在 Downloads 文件夹中,在命令行中运行:

    pip install C:\Users\YourUsername\Downloads\pycrypto‑2.6.1‑cp38‑cp38‑win_amd64.whl

    (请将路径替换为你实际的文件路径)


现代且安全的替代方案:pycryptodome

pycryptodomepycrypto 的一个分支,它是一个活跃维护的、功能完全兼容的替代品。所有新项目都应该使用 pycryptodome

为什么选择 pycryptodome

  • 活跃维护:持续更新,修复了 pycrypto 的安全漏洞。
  • 功能兼容pycryptodomepycrypto 的一个“drop-in replacement”(直接替换),这意味着你几乎不需要修改任何代码,只需要将导入语句从 from Crypto import ... 改为 from Cryptodome import ... 即可。
  • 易于安装:它是一个纯 Python 包,不需要编译,在任何平台上都可以通过 pip 轻松安装。

安装 pycryptodome

pip install pycryptodome

pycrypto 迁移到 pycryptodome 的示例

假设你旧的 pycrypto 代码是这样的:

# 旧代码 (使用 pycrypto)
from Crypto.Cipher import AES
from Crypto import Random
key = b'This is a key123'
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = b'This is a secret message'
msg = iv + cipher.encrypt(plaintext)
print(msg)

你需要做两处修改:

  1. 安装新库
    pip install pycryptodome
  2. 修改代码中的导入语句:将 Crypto 改为 Cryptodome
# 新代码 (使用 pycryptodome)
from Cryptodome.Cipher import AES
from Cryptodome import Random # 这里也从 Crypto 改为 Cryptodome
key = b'This is a key123'
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = b'This is a secret message'
msg = iv + cipher.encrypt(plaintext)
print(msg)

就是这么简单!其他所有 API 调用都保持不变。


总结与建议

特性 pycrypto pycryptodome
状态 已废弃,不安全 推荐使用,活跃维护
安装 复杂,常需编译 简单pip install 即可
代码修改 - 仅需将 from Crypto 改为 from Cryptodome
适用场景 维护极其老旧的遗留项目 所有新项目和需要更新的旧项目

最终建议:

  1. 对于新项目:直接使用 pycryptodome 或其他现代加密库(如 cryptography)。
  2. 对于需要维护的旧项目
    • 如果项目使用了 pycrypto,请立即将其迁移到 pycryptodome
    • 在迁移过程中,检查代码是否存在 pycrypto 的已知漏洞模式,并进行修复。
    • pip install pycrypto 替换为 pip install pycryptodome,并修改相应的 import 语句。
分享:
扫描分享到社交APP
上一篇
下一篇