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

时间:2016-08-17 01:31:29

标签: javascript python algorithm base64 swap

我找到了一个用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;
}
&#13;
&#13;
&#13;

的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发现这个方法使用&#34; A-Z&#34;,&#34; a-z&#34;,&#34; 0-9&#34;,&#34; +&#34 ;,&#34; /&#34;和&#34; =&#34;用于对字符串进行编码的字符 现在该做些什么来获得与python相同的结果?

2 个答案:

答案 0 :(得分:2)

没有。它的代码不一样。

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

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

如果代码中的所有字母都相同,会发生什么?

我没有看得更远。

我建议先进行“文字”翻译,然后尝试对代码进行“Pythonic”修改。

答案 1 :(得分:0)

您正在代码中的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