2017-07-14 29 views
0

我一直在努力對一些代碼進行反向工程,並持續了幾天,而且我已經陷入困境。這基本上只是一個邏輯問題,我不能包攬我的分鐘,我和我的合作伙伴都陷在這個問題上。從解碼方法編寫編碼方法

的設置:

function decrypt(s) { 

var r = ""; 
var tmp = s.split("9812265"); 
s = unescape(tmp[0]); 
k = "4849604567466"; 

var temp, temp2, temp3, tempf; 
for(var i = 0; i < s.length; i++) { 

    temp = parseInt(k.charAt(i%k.length)); 
    temp2 = s.charCodeAt(i); 
    temp3 = (temp^temp2)-3; 
    tempf = String.fromCharCode(temp3); 
    r += tempf; 

} 

return r; 

} 

我有這個功能,並且循環是我們無法扭轉。要發生什麼是將HTML轉換成一堆字符,然後轉義這些字符。我寫了一個可以轉義任何字符串的方法,所以這部分很簡單。執行更改的循環只是爲了解決邏輯問題。

+0

只需手動展開一個長度爲2或3的字符串循環,應該很明顯如何編寫'encrypt'函數。不,我不打算爲你做。 –

回答

0
function encrypt(output) 
{ 

    var SecretNumber = "4849604"; 
    var returnValue = ""; 

    for(var n = 0; n < output.length; n++) 
    { 
    returnValue += String.fromCharCode(parseInt(SecretNumber.charAt(n%SecretNumber.length))^(output[n].charCodeAt(0))+3); 
    } 
    return escapeAny(returnValue) + 9812265 + (escapeAny(SecretNumber)); 
} 

搭配功能轉義前面提到的字符串:

function escapeAny(string) 
{ 

    var list1 = []; 
    var list2 = []; 

    for(i = 16; i < 255; i++) 
    { 

    list1[i-16] = ("%" + i.toString(16).toString()); 
    list2[i-16] = (unescape(list1[i-16])); 

    } 

    var charAr = string.split(''); 
    var newChat = []; 
    for(i = 0; i < charAr.length; i++) 
    { 

    var currentChar = charAr[i]; 
    var charNumber = list2.indexOf(currentChar); 
    var ret = list1[charNumber]; 
    newChat[i] = ret; 

    } 

    String.prototype.replaceAll = function(search, replacement) { 
    var target = this; 
    return target.replace(new RegExp(search, 'g'), replacement); 
    }; 

    return newChat.join().replaceAll(",", ""); 

} 

該解決方案似乎運作良好。