代码实现:
1 var base64 = (function () { 2 var encodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 3 var decodeChars = new Array( 4 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 7 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, 8 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 9 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, 10 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 11 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1); 12 //编码 13 function encode(str) { 14 var out, i, len; 15 var c1, c2, c3; 16 len = str.length; 17 i = 0; 18 out = ""; 19 while (i < len) { 20 c1 = str.charCodeAt(i++) & 0xff; 21 if (i == len) { 22 out += base64.encodeChars.charAt(c1 >> 2); 23 out += base64.encodeChars.charAt((c1 & 0x3) << 4); 24 out += "=="; 25 break; 26 } 27 c2 = str.charCodeAt(i++); 28 if (i == len) { 29 out += base64.encodeChars.charAt(c1 >> 2); 30 out += base64.encodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); 31 out += base64.encodeChars.charAt((c2 & 0xF) << 2); 32 out += "="; 33 break; 34 } 35 c3 = str.charCodeAt(i++); 36 out += base64.encodeChars.charAt(c1 >> 2); 37 out += base64.encodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); 38 out += base64.encodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); 39 out += base64.encodeChars.charAt(c3 & 0x3F); 40 } 41 return out; 42 }; 43 //解码 44 function decode(str) { 45 var c1, c2, c3, c4; 46 var i, len, out; 47 len = str.length; 48 i = 0; 49 out = ""; 50 while (i < len) { 51 /* c1 */ 52 do { 53 c1 = base64.decodeChars[str.charCodeAt(i++) & 0xff]; 54 } while (i < len && c1 == -1); 55 if (c1 == -1) 56 break; 57 /* c2 */ 58 do { 59 c2 = base64.decodeChars[str.charCodeAt(i++) & 0xff]; 60 } while (i < len && c2 == -1); 61 if (c2 == -1) 62 break; 63 out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); 64 /* c3 */ 65 do { 66 c3 = str.charCodeAt(i++) & 0xff; 67 if (c3 == 61) 68 return out; 69 c3 = base64.decodeChars[c3]; 70 } while (i < len && c3 == -1); 71 if (c3 == -1) 72 break; 73 out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); 74 /* c4 */ 75 do { 76 c4 = str.charCodeAt(i++) & 0xff; 77 if (c4 == 61) 78 return out; 79 c4 = base64.decodeChars[c4]; 80 } while (i < len && c4 == -1); 81 if (c4 == -1) 82 break; 83 out += String.fromCharCode(((c3 & 0x03) << 6) | c4); 84 } 85 return out; 86 }; 87 return { 88 encode: encode, 89 decode: decode 90 }; 91 })();