crypto导入报错问题解决记录
安装没有什么问题,不管哪一个实际上都是crypto,这个库似乎有点特殊
from Crypto.PublicKey import RSA
如果显示导入报错,别急
先卸载安装过的所有的crypto模块,pip list,看一看带crypto名字的,全都pip uninstall xxx
全部卸载干净后:pip install pycryptodome
一定要全部卸载后,如果已经安装过pycryptodome,也要卸载,不然依然报错。必须卸载完所有安装的crypto模块,最后安装pycryptodome
补充
网上大部分都是重命名的方案,把crypto大小写重新改名,个人认为对于第三方库,最好不要做修改,哪怕是这种很小的改动。
如何使用 (RSA)
代码如下:
如果使用过linux操作系统的人一定对于密钥的生成不陌生,ssh-keygen,生成密钥,用于免密登录。
代码先生成一对密钥,然后使用这对密钥进行加密和解密。这里要提一下对称加密和非对称加密。
从安全性上来考虑,非对称加密>对称加密,RSA 是非对称加密,AES 是对称加密,安全性高并不意味着好,越高的安全性意味着越低的效率,不过在低数据量下,二者差别不大,所以可以按需使用。最佳的方式就是用 RSA 加密 AES 密钥,AES 加密信息,这样的话就发挥了两者的优势。
RSA,bits越高越安全,但同时也意味着低效率,这里使用2048,实际体验时候可以试试4096。
import os.path
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
def generate_key(_public_path,_private_path,bits=2048):
if os.path.exists(_public_path) and os.path.exists(_private_path):
return
# if os.path.exists(_private_path):
# os.remove(_private_path)
# if os.path.exists(_public_path):
# os.remove(_public_path)
private_key = RSA.generate(bits=bits)
with open(_public_path, "wb") as f:
f.write(private_key.publickey().export_key())
with open(_private_path, "wb") as f:
f.write(private_key.export_key())
def encryption_decryption(_public_path, _private_path, _message = u"你好,我的全世界!"):
bytes_message = bytes(_message, encoding ="utf-8")
with open (_public_path,"rb") as f:
_public_key = RSA.importKey(f.read())
cipher