网页抓取 加密html(修改现有DESDES算法进行匹配发现难度,费时费力来执行解密方法)
优采云 发布时间: 2022-04-04 03:11网页抓取 加密html(修改现有DESDES算法进行匹配发现难度,费时费力来执行解密方法)
这几天收到一个有数据的项目采集
通过对网站的初步分析,得到如下内容
1.网站是用.NET开发的
2.要抓取的内容是用DES加密的
虽然已经获得了前端javascript的加解密算法,但我们都知道,交互开发跨语言算法是相当困难的。原计划是修改现有的php DES算法,发现太难、费时费力。后来突然想到能不能在php中调用js脚本来处理,这就是这个文章phantomjs的重点。事实上,这很简单。第一个版本打开网页,直接执行解码方法,但是这种方法处理速度会变慢。毕竟有网页访问的过程,然后不知道能不能调用本地构建的网页进行同样的处理。,我在windows上测试过,是可行的,但是我还没有在liunx上测试过。
首先,构建一个本地网页很简单,就是一个引用解码脚本的空html文档,命名为Demo.html
Document
然后开始编写一个名为 Model.js 的 phantomjs 处理脚本
var page = require('webpage').create();
page.open('Demo.html', function (status) {
if(status !== 'success' ){
console.log('FAIL');
}else{
var a = '{keys}';
var b = '{encrypt}';
console.log(page.evaluate(function(c,d){
return jsdecrypt(c,d);
},a,b));
}
phantom.exit();
});
解密方法是通过phantomjs的api page.evaluate来执行的。原计划是直接通过命令行传参,结果发现不成功。猜测是加密字符串的大小超过了命令行的最大字符长度。所以只能通过php读取js文件,然后替换。
最后是php部分
//模板数据替换
$str=file_get_contents("Model.js");//打开文件
$str=str_replace("{keys}",$a,$str);
$str=str_replace("{encrypt}",$b,$str);
file_put_contents("Decode.js",$str);//把替换的内容写到js文件中
//解码操作
$command = "phantomjs Decode.js";
print_r (passthru($command)); //因为输出内容为多行所以使用passthru方法
最后说明一下,这个方法是调用第三方程序来处理。绝对不比原生直写算法快,但速度还是可以接受的。
随便说几句,这个模板可以直接套用。