2009-10-29 81 views
0

这个函数是用ActionScirpt编写的。这是什么样的解密? PHP中是否有这个函数的函数?这是什么解密方法?

function decrypt(str, key1, key2) { 
    var v1 = []; 
    var v3 = 0; 
    while (v3 < str.length) { 
    switch (str.charAt(v3)) { 
     case '0': 
     v1.push('0000'); 
     break; 
     case '1': 
     v1.push('0001'); 
     break; 
     case '2': 
     v1.push('0010'); 
     break; 
     case '3': 
     v1.push('0011'); 
     break; 
     case '4': 
     v1.push('0100'); 
     break; 
     case '5': 
     v1.push('0101'); 
     break; 
     case '6': 
     v1.push('0110'); 
     break; 
     case '7': 
     v1.push('0111'); 
     break; 
     case '8': 
     v1.push('1000'); 
     break; 
     case '9': 
     v1.push('1001'); 
     break; 
     case 'a': 
     v1.push('1010'); 
     break; 
     case 'b': 
     v1.push('1011'); 
     break; 
     case 'c': 
     v1.push('1100'); 
     break; 
     case 'd': 
     v1.push('1101'); 
     break; 
     case 'e': 
     v1.push('1110'); 
     break; 
     case 'f': 
     v1.push('1111'); 
    } 
    ++v3; 
    } 
    v1 = (v1.join('')).split(''); 
    var v6 = []; 
    v3 = 0; 
    while (v3 < 384) { 
    key1 = (key1 * 11 + 77213) % 81371; 
    key2 = (key2 * 17 + 92717) % 192811; 
    v6[v3] = (key1 + key2) % 128; 
    ++v3; 
    } 
    v3 = 256; 
    while (v3 >= 0) { 
    var v5 = v6[v3]; 
    var v4 = v3 % 128; 
    var v8 = v1[v5]; 
    v1[v5] = v1[v4]; 
    v1[v4] = v8; 
    --v3; 
    } 
    v3 = 0; 
    while (v3 < 128) { 
    v1[v3] ^= v6[v3 + 256] & 1; 
    ++v3; 
    } 
    var v12 = v1.join(''); 
    var v7 = []; 
    v3 = 0; 
    while (v3 < v12.length) { 
    var v9 = v12.substr(v3, 4); 
    v7.push(v9); 
    v3 += 4; 
    } 
    var v2 = []; 
    v3 = 0; 
    while (v3 < v7.length) { 
    switch (v7[v3]) { 
     case '0000': 
     v2.push('0'); 
     break; 
     case '0001': 
     v2.push('1'); 
     break; 
     case '0010': 
     v2.push('2'); 
     break; 
     case '0011': 
     v2.push('3'); 
     break; 
     case '0100': 
     v2.push('4'); 
     break; 
     case '0101': 
     v2.push('5'); 
     break; 
     case '0110': 
     v2.push('6'); 
     break; 
     case '0111': 
     v2.push('7'); 
     break; 
     case '1000': 
     v2.push('8'); 
     break; 
     case '1001': 
     v2.push('9'); 
     break; 
     case '1010': 
     v2.push('a'); 
     break; 
     case '1011': 
     v2.push('b'); 
     break; 
     case '1100': 
     v2.push('c'); 
     break; 
     case '1101': 
     v2.push('d'); 
     break; 
     case '1110': 
     v2.push('e'); 
     break; 
     case '1111': 
     v2.push('f'); 
    } 
    ++v3; 
    } 
    return v2.join(''); 
} 
+2

不是一个非常安全的。 – 2009-10-29 16:25:25

回答

0

它看起来像它在单字节的二进制值转换的十六进制值,并推动他们到堆栈(虽然这些值可能不是真正的单字节存储。)然后还有第二个case语句做反向操作。

还有一些扰码或解扰(乘以指定的值,然后添加一个指定的数字,然后模块划分);传入的字符串。对于finally模块128操作,加入的字符串看起来像某人返回有效的ASCII代码以基于加入的字符串的散列值写入磁盘。不过,在我看来,你会碰到很多碰撞事件;但也许不是。如果原始数据集只包含ASCII值,我想它可能会工作得很好。

1

这是megavideo的链接解密代码。许多人已经将它移植到PHP - 只是谷歌。

+0

你是绝对正确的。这里有一个链接:http://userscripts.org/scripts/review/42944 它似乎有一些流媒体视频和广告移除非常具体的用途。 – Cynthia 2009-12-16 16:54:23