大牛们来帮忙分析下这个js 是干嘛的。并且目前这个js好像写的有问题

function getSalt(str) {
for (var arr = [], i = 0; i < str.length; i += 2)
arr.push("\x" + str.substr(i, 2));
return arr = arr.join(""),
eval("var temp = '" + arr + "'"),
temp
}
getSalt('\x00\x00\x00\x00\x42\xd4\x56\xff"');

请求大神帮忙修正下。这个js 目前执行有问题,因为不知道 他的用途,所以不知道怎么修复

 你参数有问题吧。。getSalt('\x00\x00\x00\x00\x42\xd4\x56\xff')这里直接就是“����BÔVÿ”字符串传递进去了,应该是0000000042d456ff才能对应函数里面的解码,而且你最后还多了个双引号

'\x00\x00\x00\x00\x42\xd4\x56\xff'得到的eval内容是var temp = '\x��\x��\xBÔ\xVÿ',\x后面需要时16进制的二位字符,其他内容会报错SyntaxError: malformed hexadecimal character escape sequence

应该是将\x00\x00\x00\x00\x42\xd4\x56\xff"这样的字符串转换成对应的二进制数组,而这个数组可能是作为md5等摘要算法的“盐”(salt)。

首先是越界问题, for 里的 i < str.length-2
然后是arr.push("\x" + str.substr(i, 2));的问题,截取到的东西貌似不对为

\x\x  \x00 \x\x \x00 \x\x  \x00 \x\x \x00 \x\x \x42 \x\x \xd4 \x\x \x56 \x\x \xff

要明白截取这个用来干嘛的,再去针对改

抱歉,我说错了

\xXX表示是16进制,其中XX为两位16进制数。
即\xXX的值就是0xXX

其实这个代码其他的都是逻辑上,eval()是主要的