2015-10-01 40 views
1

我已經使用這個流行的JavaScript功能。我想爲keyStr使用另一個值。我可以更改Base 64編碼的字母表字符串嗎?

我可以將keyStr的值更改爲其他值嗎? (一些不太常見)

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/="; 

function encode64(input) { 
    if (!String(input).length) return false; 
    var output = ""; 
    var chr1, chr2, chr3; 
    var enc1, enc2, enc3, enc4; 
    var i = 0; 

    do { 
     chr1 = input.charCodeAt(i++); 
     chr2 = input.charCodeAt(i++); 
     chr3 = input.charCodeAt(i++); 

     enc1 = chr1 >> 2; 
     enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 
     enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 
     enc4 = chr3 & 63; 

     if (isNaN(chr2)) { 
     enc3 = enc4 = 64; 
     } else if (isNaN(chr3)) { 
     enc4 = 64; 
     } 

     output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
     keyStr.charAt(enc3) + keyStr.charAt(enc4); 
    } while (i < input.length); 

    return output; 
} 

function decode64(input) { 
    if (!input) return false; 
    var output = ""; 
    var chr1, chr2, chr3; 
    var enc1, enc2, enc3, enc4; 
    var i = 0; 

    // remove all characters that are not A-Z, a-z, 0-9, +, /, or = 
    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 

    do { 
     enc1 = keyStr.indexOf(input.charAt(i++)); 
     enc2 = keyStr.indexOf(input.charAt(i++)); 
     enc3 = keyStr.indexOf(input.charAt(i++)); 
     enc4 = keyStr.indexOf(input.charAt(i++)); 

     chr1 = (enc1 << 2) | (enc2 >> 4); 
     chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 
     chr3 = ((enc3 & 3) << 6) | enc4; 

     output = output + String.fromCharCode(chr1); 

     if (enc3 != 64) { 
     output = output + String.fromCharCode(chr2); 
     } 
     if (enc4 != 64) { 
     output = output + String.fromCharCode(chr3); 
     } 
    } while (i < input.length); 

    return output; 
} 

keyStr設置,我已經參觀了每一個網站的以下字符串:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=

+3

(假設我已經正確理解了這一點)如果你的應用程序是唯一的編碼和解碼,那麼你可以 - 否則你會打破它 – SmokeyPHP

回答

4

是的,你可以改變字母串,但是如果解碼器使用相同的字母串,則所產生的編碼字符串只能被解碼爲其原始字節值。

如果您更改字母表(重新排列字符或使用完全不同的字符),那麼您基本上將Base 64更改爲經典替換密碼。如果給出足夠的密文,這些都不是安全的。一種常見的方法是使用頻率分析。

如果你想保護通信,那麼你應該使用TLS,因爲JavaScript加密技術打破了中間人攻擊。

相關問題