QQ空间很多地方需要使用token作为url参数才能成功获取数据,那么如何计算token(g_tk、bkn)就成了必须要解决的问题。
1、查找token加密文件
浏览器访问QQ空间,并用开发者工具抓包数据,先通过token字符串全局搜索token可能出现在的文件或者js,然后通过详细查看获知getACSFToken函数是生成token的关键,并打开具体的js文件,interface_mini.js和qzfl_v8_2.1.65.js都有该加密算法。
2、分析加密机制
从该文件中找到了加密代码,那么改造成PHP代码就很简单了。以下是JS代码:
QZONE.FrontPage.getACSRFToken = function(e) { var t; if ((e = QZFL.util.URI(e)) && (e.host && 0 < e.host.indexOf("qzone.qq.com") ? t = QZFL.cookie.get("p_skey") : e.host && 0 < e.host.indexOf("qq.com") && (t = QZFL.cookie.get("skey"))), !t) try { t = parent.QZFL.cookie.get("p_skey") || "" } catch (e) { t = QZFL.cookie.get("p_skey") || "" } for (var n = 5381, o = 0, i = (t = t || (QZFL.cookie.get("skey") || QZFL.cookie.get("rv2"))).length; o < i; ++o) n += (n << 5) + t.charAt(o).charCodeAt(); return 2147483647 & n }
3、PHP重写加密机制
function getbkn($skey) { $n = 5381; $len = strlen($skey); for($i=0;$i<$len;$i++){ $n += ($n<<5) + ord($skey[$i]); } return 2147483647 & $n; }
PHP位运算说明
1、$a<<$b:Shift left(左移),表示将$a中的位向左移动$b次(每一次移动都表示“乘以2”)
2、$a&$b:And(按位与),表示 将把$a和$b中都为1的位设为1。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)