python使用from Crypto.Random import random时候出现winrandom导入失败的解决方法

问题描述:今天在使用Crypto.Random.random的时候出现错误,具体错误原因如下:

>>> from Crypto.Random import random
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\一\AppData\Local\Programs\Python\Python37\lib\site-packages\Crypto\Random\__init__.py", line 28, in <module>
    from Crypto.Random import OSRNG
  File "C:\Users\一\AppData\Local\Programs\Python\Python37\lib\site-packages\Crypto\Random\OSRNG\__init__.py", line 34, in <module>
    from Crypto.Random.OSRNG.nt import new
  File "C:\Users\一\AppData\Local\Programs\Python\Python37\lib\site-packages\Crypto\Random\OSRNG\nt.py", line 28, in <module>
    import winrandom
ModuleNotFoundError: No module named 'winrandom'

根据查询方法,修改import  winrandom为from Crypto.Random.OSRNG import winrandom (Crypto/Random/OSRNG/nt.py)

pip3 install Crypto

运行仍然报错无法解决问题,最终解决办法为:

安装的是pycrypto这个第三方库在使用这个函数的时候会报上面的错误。

想要解决winrandom这个错误可以安装pycryptodome这个第三方库,他的使用方法和pycrypto一样

pip install pycryptodome
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
请注意,Python代码的格式对于程序的正确性非常重要。下面是修改后的代码: ```python from Crypto.Cipher import AES, PKCS1_OAEP from Crypto.Random import get_random_bytes from Crypto.Util.Padding import pad, unpad from Crypto.PublicKey import RSA # 生成RSA公私钥对 key = RSA.generate(2048) pub_key = key.publickey() # 加载明文文件 with open('p_text.txt', 'rb') as f: plain_text = f.read() # 生成随机密钥 session_key = get_random_bytes(16) # 用接收方公钥加密会话密钥 cipher_rsa = PKCS1_OAEP.new(pub_key) encrypted_key = cipher_rsa.encrypt(session_key) # 使用OFB模式加密明文文件 cipher_aes = AES.new(session_key, AES.MODE_OFB) cipher_text = cipher_aes.encrypt(pad(plain_text, AES.block_size)) # 保存密文文件 with open('c_text.txt', 'wb') as f: f.write(cipher_text) # 接收方用私钥解密会话密钥 cipher_rsa = PKCS1_OAEP.new(key) decrypted_key = cipher_rsa.decrypt(encrypted_key) # 用会话密钥解密密文文件 cipher_aes = AES.new(decrypted_key, AES.MODE_OFB) decrypted_text = unpad(cipher_aes.decrypt(cipher_text), AES.block_size) # 保存解密后的明文文件 with open('p1_text.txt', 'wb') as f: f.write(decrypted_text) # 比较明文文件和解密后的明文文件 with open('p_text.txt', 'rb') as f1, open('p1_text.txt', 'rb') as f2: if f1.read() == f2.read(): print('文件一致') else: print('文件不一致') ``` 这段代码的主要修改是对缩进进行了修正,使其符合 Python 代码的语法要求。同时,可以看到这段代码使用Python 标准库中的 `Crypto` 模块,来实现 RSA 和 AES 算法的加密和解密。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值