【发布时间】:2016-05-04 18:58:39
【问题描述】:
我试图弄清楚如何对我正在使用的脚本进行反向编码。我有解码功能。我现在必须创建编码函数,我有点挣扎,详细说明
"chr2 = (enc2 >> 2) | ((enc3 & 0x0F) << "
我不确定这到底意味着什么,或者如何确保正确填充编码数据。
我正在使用 decodeAsArray 函数将其转换为字节数组,并且效果很好。现在只是想反之亦然,以相反的方式对 base64 进行编码,所以我希望创建一个 encodeFromArray 函数,在其中我将一个字节数组作为函数的输入。
Base64 = {
_keyStr: ".ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+=",
decode: function( input ) {
var output = "";
var hex = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
var base64test = /[^A-Za-z0-9\+\.\=]/g;
do {
enc1 = this._keyStr.indexOf(input.charAt(i++)) ;
enc2 = this._keyStr.indexOf(input.charAt(i++)) ;
enc3 = this._keyStr.indexOf(input.charAt(i++)) ;
enc4 = this._keyStr.indexOf(input.charAt(i++)) ;
chr1 = (enc1 | ((enc2 & 3) << 6));
chr2 = (enc2 >> 2) | ((enc3 & 0x0F) << 4);
chr3 = (enc3 >> 4) | (enc4 << 2);
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return (output);
},
decodeAsArray: function (b) {
var d = this.decode(b),
a = [],
c;
for (c = 0; c < d.length; c++) {
a[c] = d.charCodeAt(c)
}
return a
}
我认为它看起来像下面这样:
encode : function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
while (i < input.length) {
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 +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
return output;
}
但是,我不确定 enc2、enc3 和 enc4 应该如何,基于 decode 函数,然后我也不确定如何从字节数组中做到这一点
【问题讨论】:
-
您的具体问题是什么?
-
如何根据给定的解码函数对字节数组进行base64编码...
-
这里有很多关于如何在JS中进行base64编码和解码的问题。其中一些列在相关侧边栏中。
-
这些都没有告诉我如何编码,基于我给出的解码功能......
-
为什么一定要基于你的解码函数?任何 base64 编码器都应该是等效的。
标签: javascript encoding base64 bytearray