Python爬虫反爬----JavaScript前端AES加密,Python解密
原标题:Python爬虫反爬----JavaScript前端AES加密,Python解密
原文来自:CSDN 原文链接:https://blog.csdn.net/qq_36853469/article/details/103317041
将6位或者7位数字加密成22位数字字母大小写的加密方法。
采集数据时,遇到对Url进行加密的网站,大致加密情形如下
在列表页的url如下
除了端口这块没了,还有就是其他地方也变了
emmmmm,看了下,还是放弃吧,看不懂。。。复制一段代码网上查看,看到博客 https://www.cnblogs.com/libo0125ok/p/7668026.html
前端实现部分代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>测试加密</title> <script src="./files/jquery.min.js"></script> <script src="./files/jquery.cookie.js"></script> <script src="./files/jquery.hiSlider.js"></script> <script src="aes.min.js"></script> </head> <body> <script> /** * 加密(需要先加载lib/aes/aes.min.js文件) * @param word * @returns {*} */ function encrypt(word){ var key = CryptoJS.enc.Utf8.parse("qnbyzzwmdgghmcnm"); var srcs = CryptoJS.enc.Utf8.parse(word); var encrypted = CryptoJS.AES. encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});//加密方法加密 console.log("加密结果揭晓阶段:"); console.log("解密结果:",encrypted.toString().slice(0,22)); alert(encrypted.toString().slice(0,22)); return encrypted.toString(); //返回加密结果 } /** * 解密 * @param word * @returns {*} */ function decrypt(word){ var key = CryptoJS.enc.Utf8.parse("abcdefgabcdefg12"); var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return CryptoJS.enc.Utf8.stringify(decrypt).toString(); } </script> <input type="button" onclick="encrypt(3187083)" value="点击测试加密效果"> </body> </html>
结果
发现加密出的数据和我们要的很像,emmmm,就是一样的,抱歉我提前用了加密参数了。。。
确定了网站对数据的加密方式就是Aes,那么接下来就是借助Python复写实现解密了。
但是前提是我们找到了这个加密参数,就是参数key
一直调的话就会出现参数
# -*- coding: UTF-8 -*- ''' @Author :Jason ''' from Crypto.Cipher import AES import base64 import re class Decrypt(object): def process_num_url(self,partUrl): while len(partUrl) % 16 != 0:#while partUrl += (16-len(partUrl) % 16) * chr(16-len(partUrl)%16) return str.encode(partUrl) def encrypt_num_url(self,partUrl,key): aes = AES.new(str.encode(key), AES.MODE_ECB) encrypted_partUrl = str(base64.encodebytes(aes.encrypt(self.process_num_url(partUrl))), encoding='utf8').replace('n', '') # 加密 process_encrypted_partUrl = encrypted_partUrl.replace('/', "^") return process_encrypted_partUrl[:-2] def get_partUrl(self,url): need_url = re.findall(r'/(d+).jhtml',url) if need_url: return need_url[0] else: return "" def encrypt_fullUrl(self,partUrl,url,encryptedpartUrl): return url.replace(str(partUrl),str(encryptedpartUrl)) def main(self,url,key): partUrl = self.get_partUrl(url=url) encryptedpartUrl = self.encrypt_num_url(partUrl,key) encryptedfullUrl = self.encrypt_fullUrl(partUrl,url,encryptedpartUrl) print(encryptedfullUrl) if __name__ == "__main__": url = "http://ggzyjy.shandong.gov.cn:80/jsgczbgg/3186567.jhtml?type=1" # 原始链接 key = "qnbyzzwmdgghmcnm" # 加密参数 decrypt = Decrypt() decrypt.main(url,key)
解决:
参考
https://blog.csdn.net/hh775313602/article/details/78991340
https://www.cnblogs.com/libo0125ok/p/7668026.
html https://blog.csdn.net/qq_43500579/article/details/97615479
免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com
热门资源
Python 爬虫(二)...
所谓爬虫就是模拟客户端发送网络请求,获取网络响...
TensorFlow从1到2...
原文第四篇中,我们介绍了官方的入门案例MNIST,功...
TensorFlow从1到2...
“回归”这个词,既是Regression算法的名称,也代表...
TensorFlow2.0(10...
前面的博客中我们说过,在加载数据和预处理数据时...
机器学习中的熵、...
熵 (entropy) 这一词最初来源于热力学。1948年,克...
智能在线
400-630-6780
聆听.建议反馈
E-mail: support@tusaishared.com