1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 用js编解码base64

用js编解码base64

时间:2024-03-26 18:38:25

相关推荐

用js编解码base64

原文链接:/ricksun/archive//08/27/2658654.html

编码规则

Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个 “=”。

实现的代码:

1: //下面是64个基本的编码 2: var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /"; 3: var base64DecodeChars = 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 base64encode(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: { 23: out = base64EncodeChars.charAt(c1 >> 2); 24: out = base64EncodeChars.charAt((c1 & 0x3) << 4); 25: out = "=="; 26: break; 27: } 28: c2 = str.charCodeAt(i ); 29: if(i == len) 30: { 31: out = base64EncodeChars.charAt(c1 >> 2); 32: out = base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); 33: out = base64EncodeChars.charAt((c2 & 0xF) << 2); 34: out = "="; 35: break; 36: } 37: c3 = str.charCodeAt(i ); 38: out = base64EncodeChars.charAt(c1 >> 2); 39: out = base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); 40: out = base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)); 41: out = base64EncodeChars.charAt(c3 & 0x3F); 42: } 43: return out; 44: } 45: //解码的方法 46: function base64decode(str) { 47: var c1, c2, c3, c4; 48: var i, len, out; 49: len = str.length; 50: i = 0; 51: out = ""; 52: while(i < len) { 53: 54: do { 55: c1 = base64DecodeChars[str.charCodeAt(i ) & 0xff]; 56: } while(i < len && c1 == -1); 57: if(c1 == -1) 58: break; 59: 60: do { 61: c2 = base64DecodeChars[str.charCodeAt(i ) & 0xff]; 62: } while(i < len && c2 == -1); 63: if(c2 == -1) 64: break; 65: out = String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); 66: 67: do { 68: c3 = str.charCodeAt(i ) & 0xff; 69: if(c3 == 61) 70: return out; 71: c3 = base64DecodeChars[c3]; 72: } while(i < len && c3 == -1); 73: if(c3 == -1) 74: break; 75: out = String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); 76: 77: do { 78: c4 = str.charCodeAt(i ) & 0xff; 79: if(c4 == 61) 80: return out; 81: c4 = base64DecodeChars[c4]; 82: } while(i < len && c4 == -1); 83: if(c4 == -1) 84: break; 85: out = String.fromCharCode(((c3 & 0x03) << 6) | c4); 86: } 87: return out; 88: } 89: function utf16to8(str) { 90: var out, i, len, c; 91: out = ""; 92: len = str.length; 93: for(i = 0; i < len; i ) { 94: c = str.charCodeAt(i); 95: if ((c >= 0x0001) && (c <= 0x007F)) { 96: out = str.charAt(i); 97: } else if (c > 0x07FF) { 98: out = String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); 99: out = String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); 100: out = String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); 101: } else { 102: out = String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); 103: out = String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); 104: } 105: } 106: return out; 107: } 108: function utf8to16(str) { 109: var out, i, len, c; 110: var char2, char3; 111: out = ""; 112: len = str.length; 113: i = 0; 114: while(i < len) { 115: c = str.charCodeAt(i ); 116: switch(c >> 4) 117: { 118: case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: 119: // 0xxxxxxx 120: out = str.charAt(i-1); 121: break; 122: case 12: case 13: 123: // 110x xxxx 10xx xxxx 124: char2 = str.charCodeAt(i ); 125: out = String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); 126: break; 127: case 14: 128: // 1110 xxxx 10xx xxxx 10xx xxxx 129: char2 = str.charCodeAt(i ); 130: char3 = str.charCodeAt(i ); 131: out = String.fromCharCode(((c & 0x0F) << 12) | 132: ((char2 & 0x3F) << 6) | 133: ((char3 & 0x3F) << 0)); 134: break; 135: } 136: } 137: return out; 138: }调用: 1: //编码 2: value = base64encode(utf16to8(src)) 3: 4: //解码 5: value = utf8to16(base64decode(src))

转载于:/ricksun/archive//08/27/2658654.html

来源:/content-4-373401.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
Base64编码 Base64编解码

Base64编码 Base64编解码

2021-09-15

Base64编码 Base64编解码

Base64编码 Base64编解码

2024-03-12

base64编解码

base64编解码

2022-02-06

Base64 编解码

Base64 编解码

2019-03-09