You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3.6中计算/验证签名时出现No module named 'Crypto'错误

解决Python 3.6中导入Crypto库的ModuleNotFoundError问题

嘿,我之前也踩过这个坑!你遇到的ModuleNotFoundError: No module named 'Crypto'其实是因为安装的库和代码里导入的名称不匹配导致的,下面给你一步步解决的方法:

问题原因

原来的pycrypto库已经停止维护了,而且在Python 3环境下安装后可能会出现导入名称的问题。现在大家普遍用的是它的替代分支pycryptodome,这个库完全兼容原来的Crypto导入路径,同时支持Python 3.6及以上版本。

解决步骤

  1. 先卸载可能已经错误安装的旧库(如果有的话):
    pip uninstall crypto
    pip uninstall pycrypto
    
  2. 安装正确的替代库:
    pip install pycryptodome
    
  3. 安装完成后,重新运行你的签名验证代码,应该就不会再出现导入错误了。

补充代码小修正

你的签名计算与验证代码逻辑没问题,但有个Python 3的小细节需要调整:SHA256的update方法需要传入字节类型数据,所以要给字符串加上编码转换,修正后的代码如下:

from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5

message = "I want this stream signed"
digest = SHA256.new()
digest.update(message.encode('utf-8'))  # Python3中需将字符串转为字节流

# 读取私钥文件
private_key = False
with open ("private_key.pem", "r") as myfile:
    private_key = RSA.importKey(myfile.read())

# 加载私钥并签名消息
signer = PKCS1_v1_5.new(private_key)
sig = signer.sign(digest)

# 加载公钥并验证签名
verifier = PKCS1_v1_5.new(private_key.publickey())
verified = verifier.verify(digest, sig)

assert verified, 'Signature verification failed'
print('Successfully verified message')

内容的提问来源于stack exchange,提问作者faniiruh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:41:42