V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  fkzw  ›  全部回复第 1 页 / 共 1 页
回复总数  6
2017-02-17 09:23:36 +08:00
回复了 fkzw 创建的主题 JavaScript 求助:有 PHP 函数可以计算出 js 的值吗?
@Balthild 是的,这两个函数是相等的。
但是本贴的字符串“ String(((+!![]+[])-(![]+![])))+(((+!![]+[])+(![]+![]))-(+!![]+[]+[]))” 使用 php ,计算的结果,与 js 提供的函数计算的 sha1 值却不同。
是不是得把 字符串 转换一下,这个地方有点疑问。求指点。
2017-02-09 14:29:35 +08:00
回复了 fkzw 创建的主题 JavaScript 求助:有 PHP 函数可以计算出 js 的值吗?
@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()
}
2017-02-07 20:50:52 +08:00
回复了 fkzw 创建的主题 JavaScript 求助:有 PHP 函数可以计算出 js 的值吗?
@Balthild 这个使用 php sha1 ()库应该怎么搞呢? 求大佬指点下。
2017-01-12 17:05:32 +08:00
回复了 fkzw 创建的主题 JavaScript 求助:有 PHP 函数可以计算出 js 的值吗?
@langmoe 嗯 感谢。
2017-01-12 17:02:59 +08:00
回复了 fkzw 创建的主题 JavaScript 求助:有 PHP 函数可以计算出 js 的值吗?
@8qwe24657913 这个没研究过,回头看看
2017-01-12 17:02:19 +08:00
回复了 fkzw 创建的主题 JavaScript 求助:有 PHP 函数可以计算出 js 的值吗?
@bdbai 嗯 你说的对
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2731 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 08:38 · PVG 16:38 · LAX 00:38 · JFK 03:38
Developed with CodeLauncher
♥ Do have faith in what you're doing.