碰着了抓取优酷评论的一个小任务

本来以为会很随意马虎的处理掉的,然落后程中创造了优酷对付加载评论的连接有一个通过韶光加密的sgin

一样平常碰着这种情形我们可以通过自定义脚本将加密过程的js过程翻译成php脚本实行

php5332位js代码转换php代码的深坑PHP带符号的32位位移运算 PHP

这里不先容详细的解密过程,说一下碰着的问题

浏览器调用加密的过程利用的是js脚本

就在这里碰着了一个问题,或者说的js中的坑,那便是js在做<<运算的时候是32位,而现在大多是都是64位的情形,这就会发生js运算会溢出的,而我们自己写的php脚本不会溢出,这样就会涌现加密缺点的情形

具体例子:

Java:

import java.io.;

class test

{

public static void main (String[] args) throws java.lang.Exception

{

System.out.println(549404385<<12);

//结果-202502144

}

}

PHP:

<?php

echo 549404385<<12;

//结果2250360360960

exit();

?>

看着结果全体人都不好了,第一次碰着用这种坑做加密的。


不过碰着了就要办理

这里写了一个函数办理这个问题,大致思路便是在左位移运算的时候先位移,然后剖断是否溢出,溢出的话截取末了32位作为结果,然后对付结果做包含符号的编码转换

function lin64to32($a,$b)

{

$s=$a<<$b;

$ss=decbin($s);

if(strlen($ss)>=32)

{

$sss = substr($ss, -32);

if(substr( $sss, 0 , 1 )==1)

{

$num = bindec($sss)-1;

$format = '%0' . (PHP_INT_SIZE 8) . 'b';

$bin = substr(sprintf($format, ~$num),-32);

return -bindec($bin);

}

else

{

$sss = substr($ss, -32);

return bindec($sss);

}

}

else

{

return bindec($ss);

}

}

发源地作为海内首个基于自研SaaS引擎的互联网大数据交易平台,通过众包UGC模式采集/接入数据源,进行洗濯、过滤、脱敏处理后再交易,知足企业对数据剖析、启动/运营数据及精准营销等方面的需求。