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

相關文章
相關標籤/搜索