咱们在网上查看Python爬虫教程的时候,细心的朋友会发现:不少网站为了下降服务器的请求压力都作了各式各样的反爬策略,浏览器经过http post请求服务器端数据时,传输的data字段不少都是通过加密后的密文,杂乱无章。如12306网站、网易云音乐网页版:相似于下文:html
这些网站常常使用AES的加密算法。AES为一种对称性加密算法(高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。),具体运算略复杂,附上别人写的AES加解密技术贴,供参考:https://blog.csdn.net/qq_28205153/article/details/55798628。python
不少爬虫教程是针对Python2.7编写的,部分第三方库也长时间未维护,可能在新版本中已经失效。好比PyCrypto,能够用于AES、RSA等多种加密。在windows系统下python3.6版本已经没法正常安装,这个加密的库几年前就已经中止维护。而pycryptodome包能够解决此问题,pip install pycryptodome就能够。若是以前已经安装pyCrypto包,则须要在PowerShell或CMD下先卸载pyCrypto,才能安装pycryptodome成功,两个包会相互冲突:算法
一、pip uninstall pycryptowindows
二、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的加密算法。dom