Python3使用AES加密的库函数PyCrypto、PyCryptodome
我们在网上查看Python爬虫教程的时候,细心的朋友会发现:很多网站为了降低服务器的请求压力都做了各式各样的反爬策略,浏览器通过http post请求服务器端数据时,传输的data字段很多都是经过加密后的密文,杂乱无章。如12306网站、网易云音乐网页版:类似于下文:

这些网站经常使用AES的加密算法。AES为一种对称性加密算法(高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。),具体运算略复杂,附上别人写的AES加解密技术贴,供参考:https://blog.csdn.net/qq_28205153/article/details/55798628。
很多爬虫教程是针对Python2.7编写的,部分第三方库也长时间未维护,可能在新版本中已经失效。比如PyCrypto,可以用于AES、RSA等多种加密。在windows系统下python3.6版本已经无法正常安装,这个加密的库几年前就已经停止维护。而pycryptodome包可以解决此问题,pip install pycryptodome就可以。如果之前已经安装pyCrypto包,则需要在PowerShell或CMD下先卸载pyCrypto,才能安装pycryptodome成功,两个包会相互冲突:
1、pip uninstall pycrypto
2、pip install pycryptodome
不过pycryptodome兼容性更好,但是语法跟pycrypto包基本无差别。很多基于pycrypto的python脚本,代码稍加修改就可以兼容pycryptodome。官方文档表明它支持python2.6及以上还有python3+的版本:原文:It supports Python 2.6 or newer, all Python 3 versions and PyPy。附上官方文档:http://pycryptodome.readthedocs.io/en/latest/src/introduction.html
代码的引入方式也非常简单:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(data) file_out = open("encrypted.bin", "wb")
[ file_out.write(x) for x in (cipher.nonce, tag, ciphertext) ]
当然我们如果不知道密钥,只知道AES加密后的密文,依旧很难推算出明文,AES加密正是因为它的快速和绝对安全,才会在诸多领域有着广泛的应用,比如:家用路由器就普遍采用AES的加密算法。
Python3使用AES加密的库函数PyCrypto、PyCryptodome的更多相关文章
- Python3.6 AES加密 pycrypto 更新为 pycryptodemo | TypeError: Object type <class 'str'> cannot be passed to C code
#!/usr/bin/env python# -*- coding:utf-8 -*-# @author: rui.xu# @update: jt.huang# 这里使用pycryptodemo库# ...
- 使用Python3进行AES加密和解密 输入的数据
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...
- python3 执行AES加密方法
cmd执行命令:pip install pycryptodome # -*- coding: utf-8 -*- # __author__ = 'Carry' import base64 from C ...
- python3.6 安装第三方库 pyCryptodome 实现AES加密
起因 前端日子写完的Python入库脚本,通过直接读取配置文件的内容(包含了数据库的ip,数据库的用户名,数据库的密码),因为配置文件中的数据库密码是明文显示的,所以不太安全,由此对其进行加密. 编码 ...
- python3.6 实现AES加密的示例(pyCryptodome)
当然我也是通过官方推荐,使用下面命令去下载安装的,pip就是好用... pip install pycryptodome 撸码开始 废话不多说,直接上demo # from Crypto.Has ...
- java代码实现python2中aes加密经历
背景: 因项目需要,需要将一个python2编写的aes加密方式改为java实现. 1.源python2实现 from Crypto.Cipher import AES from binascii i ...
- Python 的AES加密与解密
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...
- python实现AES加密、解密
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...
- js逆向之AES加密
故事背景: 在获取某网站接口数据时,发现其请求的 headers 中的参数 使用了 AES算法加密 ,并对其进行校验,在此简单记录下自己的踩坑历程. AES简介: 高级加密标准(AES,Advance ...
随机推荐
- 大话Json对象和Json字符串
一.Json对象和Json字符串的区别 (1)Json对象:可以通过javascript存取属性. 先介绍一下json对象,首先说到对象的概念,对象的属性是可以用:对象.属性进行调用的.例如: var ...
- oracle表查询优化
ORACLE有个高速缓冲的概念,这个高速缓冲就是存放执行过的SQL语句,那oracle在执行sql语句的时候要做很多工作,例如解析sql语句,估算索引利用率,绑定变量,读取数据块等等这些操作.假设高速 ...
- 利用Navicate把SQLServer转MYSQL的方法(连数据)
中文乱码问题:https://pqcc.iteye.com/blog/661640 本次转换需要依赖使用工具Navicat Premium. 首先,将数据库移至本地SQLServer,我试过直接在局域 ...
- C++笔试面试题整理
朋友给出的一些常见的C++面试题,特整理如下,后期遇到新的再更新. 面试题 列举并解释C++中的四种运算符转化,说明它们的不同点: static_cast: 在功能上基本上与C风格的类型转换一样强大, ...
- mysql 存储过程、循环
CREATE PROCEDURE questionProc() BEGIN declare pgId ); declare pGuid varchar(); -- 定义游标卡尺 declare don ...
- [转]springboot2 webflux 响应式编程学习路径
原文链接 spring官方文档 springboot2 已经发布,其中最亮眼的非webflux响应式编程莫属了!响应式的weblfux可以支持高吞吐量,意味着使用相同的资源可以处理更加多的请求,毫无疑 ...
- mysql主从复制-方案2
MySQL主从介绍 (两台机器数据同步) 主:-->binlog 从:-->relaylog 主上有一个log dump线程,用来和从的I/O线程传递binlog 从上有两个线程,其中I/ ...
- SpringBoot------集成MyBatis报错
在spring boot启动main方法所在的类中加入 @MapperScan注入后报错: Invalid default: public abstract java.lang.Class org.m ...
- java中jdbc源码解读
在jdbc中一个重要的接口类就是java.sql.Driver,其中有一个重要的方法:Connection connect(String url, java.util.Propeties info); ...
- Skip the Class
BestCoder Round #92 Skip the Class Accepts: 678 Submissions: 1285 Time Limit: 2000/1000 MS (Java/ ...