求助:有 PHP 函数可以计算出 js 的值吗?

2017-01-11 17:19:57 +08:00
 fkzw

var fid = $.sha1(String(((+!![]+[])-(![]+![])))+(((+!![]+[])+(![]+![]))-(+!![]+[]+[]))); js 中的式子,如何使用 php 函数计算出 fid 的值呢?

3212 次点击
所在节点    JavaScript
22 条回复
8qwe24657913
2017-01-11 17:32:23 +08:00
bdbai
2017-01-11 17:46:34 +08:00
目测反爬虫机制,格式不变的话自己写解析器。或者直接用 Node.js , eval 一下就好。
gouchaoer
2017-01-11 19:29:27 +08:00
v8js 并没有啥用,因为里面没有 dom , js 和 dom 绑定很厉害的
ck65
2017-01-11 19:31:41 +08:00
@gouchaoer 你在说什么。。?😂
t6attack
2017-01-11 19:44:48 +08:00
@ck65 +1
@gouchaoer 你在说什么。。?😂
langmoe
2017-01-11 20:28:56 +08:00
dantegg
2017-01-11 20:40:09 +08:00
@gouchaoer 你在说什么?😂
mingyun
2017-01-11 20:55:04 +08:00
这 js 代码。。。
yzhen123
2017-01-12 04:37:10 +08:00
为啥你们都取笑 @gouchaoer 我觉得说的很有可能有道理,$开头的一般就是 jquery ,单独在 node 下可能还真跑不了,虽然有 jsdom 这样的黑科技,但是真用起来还不知道得踩多少坑
yzhen123
2017-01-12 04:37:50 +08:00
推荐 phantomjs 还是王道
AlloVince
2017-01-12 10:41:45 +08:00
php -r 'echo sha1(exec("node -e '\''console.log(String(((+!![]+[])-(![]+![])))+(((+!![]+[])+(![]+![]))-(+!![]+[]+[])))'\''"));'
fkzw
2017-01-12 17:02:19 +08:00
@bdbai 嗯 你说的对
fkzw
2017-01-12 17:02:59 +08:00
@8qwe24657913 这个没研究过,回头看看
fkzw
2017-01-12 17:05:32 +08:00
@langmoe 嗯 感谢。
Balthild
2017-01-12 17:16:00 +08:00
@yzhen123 $.sha1() 換成其他 sha1 的 js 庫就行了,如果願意甚至可以直接用 php 的 sha1()
fkzw
2017-02-07 20:50:52 +08:00
@Balthild 这个使用 php sha1 ()库应该怎么搞呢? 求大佬指点下。
Balthild
2017-02-09 12:39:32 +08:00
@fkzw php 自带 sha1() 函数
fkzw
2017-02-09 14:29:35 +08:00
@Balthild 使用 php sha1() 计算出来的结果是不正确的。

js 的 sha1 函数 计算的结果是正确的, sha1 函数 如下,能否改写成 php 的 sha1 函数吗?

function sha1 (str) {
var hash
try {
var crypto = require('crypto')
var sha1sum = crypto.createHash('sha1')
sha1sum.update(str)
hash = sha1sum.digest('hex')
} catch (e) {
hash = undefined
}

if (hash !== undefined) {
return hash
}

var _rotLeft = function (n, s) {
var t4 = (n << s) | (n >>> (32 - s))
return t4
}

var _cvtHex = function (val) {
var str = ''
var i
var v

for (i = 7; i >= 0; i--) {
v = (val >>> (i * 4)) & 0x0f
str += v.toString(16)
}
return str
}

var blockstart
var i, j
var W = new Array(80)
var H0 = 0x67452301
var H1 = 0xEFCDAB89
var H2 = 0x98BADCFE
var H3 = 0x10325476
var H4 = 0xC3D2E1F0
var A, B, C, D, E
var temp

// utf8_encode
str = unescape(encodeURIComponent(str))
var strLen = str.length

var wordArray = []
for (i = 0; i < strLen - 3; i += 4) {
j = str.charCodeAt(i) << 24 |
str.charCodeAt(i + 1) << 16 |
str.charCodeAt(i + 2) << 8 |
str.charCodeAt(i + 3)
wordArray.push(j)
}

switch (strLen % 4) {
case 0:
i = 0x080000000
break
case 1:
i = str.charCodeAt(strLen - 1) << 24 | 0x0800000
break
case 2:
i = str.charCodeAt(strLen - 2) << 24 | str.charCodeAt(strLen - 1) << 16 | 0x08000
break
case 3:
i = str.charCodeAt(strLen - 3) << 24 |
str.charCodeAt(strLen - 2) << 16 |
str.charCodeAt(strLen - 1) <<
8 | 0x80
break
}

wordArray.push(i)

while ((wordArray.length % 16) !== 14) {
wordArray.push(0)
}

wordArray.push(strLen >>> 29)
wordArray.push((strLen << 3) & 0x0ffffffff)

for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) {
for (i = 0; i < 16; i++) {
W[i] = wordArray[blockstart + i]
}
for (i = 16; i <= 79; i++) {
W[i] = _rotLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1)
}

A = H0
B = H1
C = H2
D = H3
E = H4

for (i = 0; i <= 19; i++) {
temp = (_rotLeft(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff
E = D
D = C
C = _rotLeft(B, 30)
B = A
A = temp
}

for (i = 20; i <= 39; i++) {
temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff
E = D
D = C
C = _rotLeft(B, 30)
B = A
A = temp
}

for (i = 40; i <= 59; i++) {
temp = (_rotLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff
E = D
D = C
C = _rotLeft(B, 30)
B = A
A = temp
}

for (i = 60; i <= 79; i++) {
temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff
E = D
D = C
C = _rotLeft(B, 30)
B = A
A = temp
}

H0 = (H0 + A) & 0x0ffffffff
H1 = (H1 + B) & 0x0ffffffff
H2 = (H2 + C) & 0x0ffffffff
H3 = (H3 + D) & 0x0ffffffff
H4 = (H4 + E) & 0x0ffffffff
}

temp = _cvtHex(H0) + _cvtHex(H1) + _cvtHex(H2) + _cvtHex(H3) + _cvtHex(H4)
return temp.toLowerCase()
}
Balthild
2017-02-11 15:17:35 +08:00
@fkzw 简单地测试了一下:
取字符串「 333917 」(本帖的 id )
用 php 计算 sha1 结果为 af4ae87b322f76c430b579fcf8ca54aa886de62a
用你提供的 js 函数(在 Chrome Console )计算 sha1 结果为 af4ae87b322f76c430b579fcf8ca54aa886de62a
看不出哪里有错误……
fkzw
2017-02-17 09:23:36 +08:00
@Balthild 是的,这两个函数是相等的。
但是本贴的字符串“ String(((+!![]+[])-(![]+![])))+(((+!![]+[])+(![]+![]))-(+!![]+[]+[]))” 使用 php ,计算的结果,与 js 提供的函数计算的 sha1 值却不同。
是不是得把 字符串 转换一下,这个地方有点疑问。求指点。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/333917

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX