一、加密后的数据变形
二、加密函数的定义
def encrypt_message(message): cipher = AES.new(key, AES.MODE_ECB) padded_message = pad(message.encode(), AES.block_size, style='pkcs7') cliphertext = cipher.encrypt(padded_message) return cliphertext
首先要调用
from Crypto.Cipher import AES from Crypto.Util.Padding import pad
这里要说的是pkcs7的使用
三、页面调用
页面公告的内自动化找到标题和链接
from DrissionPage import ChromiumPage, ChromiumOptions from Crypto.Cipher import AES import base64 # chrome:version co=ChromiumOptions().set_paths(browser_path=r"C:\Users\lenovo\AppData\Local\Google\Chrome\Application\chrome.exe") page = ChromiumPage(co) page.get("http://ggzy.zwfwb.tj.gov.cn/") page.wait.load_start() for art in page.eles('x://div[@id="message-shu1"]/ul/li', timeout=5): art_name = art.ele('x://div[@class="xw-w"]/a').text art_url = art.ele('x://div[@class="xw-w"]/a').attr("href") art_time = art.ele('x://div[@class="xw-time"]').text print(art_name, art_url, art_time) s = art_url.split('/')[4].split('.')[0]
四、分析链接
# http://ggzy.zwfwb.tj.gov.cn /zwyw/ZX8N+%5EdXMw4NiFQnAayv%5Ew.jhtml # http://ggzy.zwfwb.tj.gov.cn:80/zwyw/1147530.jhtml
地址域名是去掉80端口1147530加密成了ZX8N+%5EdXMw4NiFQnAayv%5Ew
五、代码实现
从获取的地址 s = art_url.split('/')[4].split('.')[0]找到加密的数据源
通过点击事件找到函数
这段代码中找到key ,转换成二进制encode('utf-8')
key = 'qnbyzzwmdgghmcnm'.encode('utf-8')
def encrypt_message(message): cipher = AES.new(key, AES.MODE_ECB) padded_message = pad(message.encode(), AES.block_size, style='pkcs7') cliphertext = cipher.encrypt(padded_message) return cliphertext cs = s print(cs) encs=base64.b64encode(encrypt_message(cs)).decode("utf-8") print(str(encs))
加密后的数据是二进制 通过b64变成字符再decode变成字符串
# b'ZX8N+ / dXMw4NiFQnAayv / w==' # ZX8N+ %5EdXMw4NiFQnAayv %5Ew
比较两个加密数据进行分割变将/替换成%5E
encs_spl=encs.rstrip('=').replace('/','%5E') print(encs_spl)
newurl = f'http://ggzy.zwfwb.tj.gov.cn/zwyw/' + encs_spl + '.jhtml'
找到新的地址
验证成功,打开页面