Python3使用AES加密的库函数PyCrypto、PyCryptodome

  咱们在网上查看Python爬虫教程的时候,细心的朋友会发现:不少网站为了下降服务器的请求压力都作了各式各样的反爬策略,浏览器经过http post请求服务器端数据时,传输的data字段不少都是通过加密后的密文,杂乱无章。如12306网站、网易云音乐网页版:相似于下文:html

 

  这些网站常常使用AES的加密算法。AES为一种对称性加密算法(高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。),具体运算略复杂,附上别人写的AES加解密技术贴,供参考:https://blog.csdn.net/qq_28205153/article/details/55798628python

  不少爬虫教程是针对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

相关文章
相关标签/搜索