Python3.6中计算/验证签名时出现No module named 'Crypto'错误
解决Python 3.6中导入Crypto库的ModuleNotFoundError问题
嘿,我之前也踩过这个坑!你遇到的ModuleNotFoundError: No module named 'Crypto'其实是因为安装的库和代码里导入的名称不匹配导致的,下面给你一步步解决的方法:
问题原因
原来的pycrypto库已经停止维护了,而且在Python 3环境下安装后可能会出现导入名称的问题。现在大家普遍用的是它的替代分支pycryptodome,这个库完全兼容原来的Crypto导入路径,同时支持Python 3.6及以上版本。
解决步骤
- 先卸载可能已经错误安装的旧库(如果有的话):
pip uninstall crypto pip uninstall pycrypto - 安装正确的替代库:
pip install pycryptodome - 安装完成后,重新运行你的签名验证代码,应该就不会再出现导入错误了。
补充代码小修正
你的签名计算与验证代码逻辑没问题,但有个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
相关产品推荐
相关产品推荐

