已经翻译了大部分,在后段落遇到了难题:
function i(e, t) {
var n = new Array(256);
var a = new Array(e.length);
var r, i = "", o, s, c;
for (r = 0; r < 256; r++) {
n[r] = r;
i = (i + n[r] + t.charCodeAt(r % t.length)) % 256;
s = n[r];
n[r] = n[i];
n[i] = s;
}
for (r = 0; r < e.length; r++) {
a[r] = e.charCodeAt(r);
}
for (o = 0; o < a.length; o++) {
r = (r + 1) % 256;
i = (i + n[r]) % 256;
s = n[r];
n[r] = n[i];
n[i] = s;
c = (n[r] + n[i] % 256) % 256; // <-----------------翻译到这了,在这里卡住了,因为js列表索引NaN也有值,在py中我用temp来替代这个值,但是由于n[r] 和 n[i]是否有数,导致这条语句用py怎么也复现不了。
a[o] = String.fromCharCode(a[o] ^ n[c]);
}
return a.join("");
}
var t = i("21\\1²0g611Ü4\u0012\u00057", "请联系 [email protected]"); // <--带入了加密的字符串
console.log(t); //211120161104527
正确结果应该是:211120161104527
1
Jolly23 OP def test(e, t):
n = [] for i in range(256): n.append(None) a = [] for i in range(len(e)): a.append(None) i = 0 for r in range(256): n[r] = r i = (i + n[r] + ord(t[r % len(t)])) % 256 s = n[r] n[r] = n[i] n[i] = s for r in range(len(e)): a[r] = ord(e[r]) r = len(e) for o in range(len(a)): r = (r + 1) % 256 try: i = (i + n[r]) % 256 except TypeError: i = None s = n[r] if i: n[r] = n[i] else: n[r] = None temp = 0 if i: n[i] = s else: temp = s #c = (n[r] + n[i] % 256) % 256 这句 js 码通不过,搞不对 ##### 。。。。。 ##### test(u"21\\1²0g611Ü4\u0012\u00057", u"请联系 [email protected]") |
2
kindjeff 2016-08-19 18:36:56 +08:00
>因为 js 列表索引 NaN 也有值,在 py 中我用 temp 来替代这个值,但是由于 n[r] 和 n[i]是否有数,导致这条语句用 py 怎么也复现不了
这句话是什么意思 |
3
Jolly23 OP |
4
kindjeff 2016-08-19 18:47:30 +08:00
不论怎么加减乘除都是 NaN 呀,然后 a[o]和 NaN 异或一下还是 a[o]
|
5
prefere 2016-08-19 18:48:55 +08:00
a = NaN
b= a + 1 >>NaN c = undefined d = c + 1 >>NaN 没看懂,你是想问这个吗? |
7
Jolly23 OP 翻译啊翻译
|