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()是主要的