将 js 函数转换为 python 函数不起作用

Convert js function to python functions does't work

我找到了一个用 js 写的算法(我不知道如何编码)然后我在和一些懂 js 的朋友交谈后试图将它转换为 python
Javascript

function crack(code) {
 var N = '';
 var M = '';
 
 for(var i = 0; i < code.length; i++) {
  if(i%2 == 0) {
   N += code[i];
  } else {
   M = code[i] + M;
  }
 }
 
 var key = N + M;

 key = window.atob(key);
 key = key.substring(2);
 
 return key;
}

Python

import base64
def crack(code):
    N = ''
    M = ''
    i = 0
    for letter in code:
        i =code.find(letter)
        if i%2 == 0:
            N += code[i]
        else:
            M =code[i] + M
    key = N + M
    key = base64.b64decode(key)
    key = key[2:]
    print key

如您所见,它是相同的代码,但这里的问题是给出的结果不同!!
这里要试穿的字符串是:

N=m=NAobdtHRRHwaOuiU8mvcZhWddH5bZhz1MWzLapyR5nibbhG19ynccl3RBXvediCV5mjcbh2d0HubZhW1cWvLM4j8ACxONwi8

在搜索了一段时间后 window.atob 发现这个方法解码了一个由 btoa() 方法编码的数据字符串。
然后搜索btoa发现这个方法使用"A-Z", "a-z", "0-9", "+", "/" and "=" characters to encode the string.
现在如何使用 python 获得相同的结果??

没有。这不是同一个代码。

for(var i = 0; i < code.length; i++) {
    if(i%2 == 0) {

不同
for letter in code:
    i =code.find(letter)
    if i%2 == 0:

如果代码中的所有字母都相同会怎样?

我没有看得更远。

我建议先进行 "literal" 翻译,然后尝试 "Pythonic" 修改代码。

您正在搜索代码中第一个出现的字母,在行 i =code.find(letter) 中。因为你想要索引,我建议使用 enumerate

结果:

import base64
def crack(code):
    N = ''
    M = ''
    i = 0
    for i, letter in enumerate(code):
        if i%2 == 0:
            N += code[i]
        else:
            M =code[i] + M
    key = N + M
    key = base64.b64decode(key)
    key = key[2:]
    print key

似乎正确:

>>> crack('N=m=NAobdtHRRHwaOuiU8mvcZhWddH5bZhz1MWzLapyR5nibbhG19ynccl3RBXvediCV5mjcbh2d0HubZhW1cWvLM4j8ACxONwi8')
http://egyg33k.blogspot.com.eg/2016/08/8-malwarebytes-anti-malware.html