Python爬蟲實戰(zhàn)JS逆向AES逆向加密爬取
爬取目標(biāo)
網(wǎng)址:監(jiān)管平臺

工具使用
開發(fā)工具:pycharm
開發(fā)環(huán)境:python3.7, Windows10
使用工具包:requests,AES,json
涉及AES對稱加密問題 需要 安裝node.js環(huán)境
使用npm install 安裝 crypto-js
項目思路解析
確定數(shù)據(jù) 在這個網(wǎng)頁可以看到數(shù)據(jù)是動態(tài)返回的 但是 都是加密的 如何確定是我們需要的?

突然想到 如果我分頁 是不是會直接加載第二個頁面 然后查看相似度 找到第一個頁面, 我真是太聰明了

數(shù)據(jù)找到了 現(xiàn)在開始尋找加密 但是突然發(fā)現(xiàn)沒有 加密的關(guān)鍵字? 那我們通過url 下手試試 在All里面全局 搜索 query/comp/list(url后面的參數(shù))

找到這個接口 鼠標(biāo)右鍵 可以在源代碼查看他



慢慢調(diào)試 中間調(diào)試太多了 我就不一一截圖出來了 跑到這里 發(fā)現(xiàn)data 里面的參數(shù) 和我們看到的加密一致
h(t.data) 加密位置

進(jìn)去h里面 (鼠標(biāo)光標(biāo)放到 h上面 會顯示他的 js地址 如果沒有顯示 就是證明你還沒有執(zhí)行到這里 需要在前面打上斷點 刷新頁面調(diào)試)

發(fā)現(xiàn)這個采用AES加密算法 使用模型CBC模式 采用填充方式為 Pkcs7
AES.decrypt() # 參數(shù)說明 秘鑰 模式 偏移值
f = 'jo8j9wGw%6HbxfFn' # 秘鑰
m = '0123456789ABCDEF' # 偏移值
證明數(shù)據(jù)推導(dǎo)正確 在 return r.toString() 打上斷點

r里面數(shù)據(jù)正常返回
簡易源碼分享
import requests
from Crypto.Cipher import AES
import json
url = 'http://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?pg=2&pgsz=15&total=0'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38'
}
response = requests.get(url, headers=headers).text
f = 'jo8j9wGw%6HbxfFn' # 秘鑰
m = '0123456789ABCDEF' # 偏移值
# 轉(zhuǎn)碼 utf-8? 字節(jié) 16進(jìn)制
m = bytes(m, encoding='utf-8')
f = bytes(f, encoding='utf-8')
# 創(chuàng)建一個AES算法 秘鑰 模式 偏移值
cipher = AES.new(f, AES.MODE_CBC, m)
# 解密
decrypt_content = cipher.decrypt(bytes.fromhex(response))
result = str(decrypt_content, encoding='utf-8')
# OKCS7 填充
length = len(result) # 字符串長度
unpadding = ord(result[length - 1]) # 得到最后一個字符串的ASCII
result = result[0:length - unpadding]
result = json.loads(result)['data']['list'] # dupms json.dumps() dict 格式 json的
# {"鍵":"值"}
for i in result:
print(i)
以上就是Python爬蟲實戰(zhàn)JS逆向AES逆向加密爬取的詳細(xì)內(nèi)容,更多關(guān)于Python爬取JS逆向AES逆向加密的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
手把手教你pycharm專業(yè)版安裝破解教程(linux版)
這篇文章主要介紹了 手把手教你pycharm專業(yè)版安裝破解教程(linux版),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
完美解決Pycharm中matplotlib畫圖中文亂碼問題
這篇文章主要介紹了完美解決Pycharm中matplotlib畫圖中文亂碼問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Matplotlib控制坐標(biāo)軸刻度間距與標(biāo)簽實例代碼
在matplotlib中,記號是圖形兩個軸上的小標(biāo)記,到目前為止,我們讓matplotlib處理軸圖例上記號的位置,下面這篇文章主要給大家介紹了關(guān)于Matplotlib控制坐標(biāo)軸刻度間距與標(biāo)簽的相關(guān)資料,需要的朋友可以參考下2021-10-10
使用pyplot.matshow()函數(shù)添加繪圖標(biāo)題
這篇文章主要介紹了使用pyplot.matshow()函數(shù)添加繪圖標(biāo)題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
python從網(wǎng)絡(luò)讀取圖片并直接進(jìn)行處理的方法
這篇文章主要介紹了python從網(wǎng)絡(luò)讀取圖片并直接進(jìn)行處理的方法,涉及cStringIO模塊模擬本地文件的使用技巧,需要的朋友可以參考下2015-05-05
python圖形界面開發(fā)之wxPython樹控件使用方法詳解
這篇文章主要介紹了python圖形界面開發(fā)之wxPython樹控件使用方法詳解,需要的朋友可以參考下2020-02-02

