爬到數據不會解密可還行?
- 2019 年 10 月 4 日
- 筆記
隨著網路上爬蟲的橫行和猖獗,各大網站為了最大限度地限制自家數據被採集,紛紛加入了各種反爬手段,比如:
- 生成瀏覽器UA指紋識別;
- 用各種驗證方式(簡訊、滑塊、點選漢字、點擊)進行識別;
- ……
這一類的反爬手段都是一層防禦,類似於城堡的城門一樣,只要突破這道防線,就可以為所欲為了。

除此之外,還有一些網站,會進行二層防禦,對數據加入各種限制措施,比如混淆、加密等。這就像我們進了城門之後,要是想進某某內城,還得經過門口的官兵對腰牌和核驗。

比如某電商網站就在數據中使用了AES加密,其返回的數據如下圖所示:

經過解密之後,我們可以得到真正的數據為,如下圖所示:

這就是利用Python進行AES解密實現的,下面,我們來介紹一下在Python中對數據進行AES加密和AES解密。
簡介
以下內容來自於網路,大家隨便看看,如果想詳細了解,可以找專門的資料進行學習:
AES全稱為高級加密標準,是Advanced Encryption Standard的首字母簡寫。
AES加密標準又稱為高級加密標準Rijndael加密法,是美國國家標準技術研究所NIST旨在取代DES的21世紀的加密標準。AES的基本要求是,採用對稱分組密碼體制,密鑰長度可以為128、192或256位,分組長度128位,演算法應易在各種硬體和軟體上實現。1998年NIST開始AES第一輪分析、測試和徵集,共產生了15個候選演算法。[1] 1999年3月完成了第二輪AES2的分析、測試。2000年10月2日美國政府正式宣布選中比利時密碼學家Joan Daemen和Vincent Rijmen提出的一種密碼演算法Rijndael作為AES的加密演算法。 AES加密數據塊和密鑰長度可以是128b、192b、256b中的任意一個。AES加密有很多輪的重複和變換。大致步驟如下:①密鑰擴展(Key Expansion);②初始輪(InitialRound);③重複輪(Rounds),每一重複輪又包括位元組間減法運算(SubBytes)、行移位(ShiftRows)、列混合(MixColurmns)、輪密鑰加法運算(AddRoundKey)等操作;①最終輪(Final Round),最終輪沒有列混合操作(MixColumns)。
加密
在這裡,我們選用AES加密演算法中的CBC模式來進行演示。
在上面我們提過,AES加密演算法的CBC模式採用密鑰和偏移量的方式對數據進行加密,所以我們首先定義幾個公共的參數,包括原始數據、密鑰、偏移量和AES的CBC模式,程式碼如下所示:
a = '''{'name':'州的先生','url':'zmister.com','desc':'編程應用實戰'}''' # 原始數據 k = 'zmistercomzmiste'.encode('utf-8') # 密鑰 iv = b'1234567890asdfgh' # 偏移量 mode = AES.MODE_CBC # 模式
在這裡,我們設置的密鑰長度為16位字元串,也就是128位位元組,在AES加密演算法中,密鑰的長度必須為16位字元串(128位元組)、34位字元串(192位元組)、32位字元串(256位元組)。
接著,我們創建一個函數,用來對原始的數據進行加密:
# 加密數據 def cryp_str(value): value = value.encode('utf-8') # 對數據進行utf-8編碼 cryptor = AES.new(k, mode, iv) # 創建一個新的AES實例 length = 16 count = len(value) # 如果數據長度小於密鑰長度 if count < length: add = (length - count) # backspace text = value + ('