JS实现Base64加解密
来源:互联网 发布:weka java api 编辑:程序博客网 时间:2024/06/06 03:25
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var base64DecodeChars = new Array( -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);/** * BASE64 加密 */function base64encode(text) {if(typeof(text) == undefined || text ==null || text ==""){return "";}text = UTF16To8(text); var out, i, len; var c1, c2, c3; len = text.length; i = 0; out = "";while(i < len) { c1 = text.charCodeAt(i++) & 0xff; if(i == len){ out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt((c1 & 0x3) << 4); out += "=="; break; } c2 = text.charCodeAt(i++); if(i == len){ out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); out += base64EncodeChars.charAt((c2 & 0xF) << 2); out += "="; break; } c3 = text.charCodeAt(i++); out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)); out += base64EncodeChars.charAt(c3 & 0x3F);} return out;}/** * BASE64 解码 */function base64decode(text) { var c1, c2, c3, c4; var i, len, out; len = text.length; i = 0; out = "";while(i < len) {do {c1 = base64DecodeChars[text.charCodeAt(i++) & 0xff];} while(i < len && c1 == -1);if(c1 == -1) break;do {c2 = base64DecodeChars[text.charCodeAt(i++) & 0xff];} while(i < len && c2 == -1);if(c2 == -1) break;out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));do {c3 = text.charCodeAt(i++) & 0xff;if(c3 == 61) return out;c3 = base64DecodeChars[c3];} while(i < len && c3 == -1);if(c3 == -1) break;out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));do {c4 = text.charCodeAt(i++) & 0xff;if(c4 == 61) return out;c4 = base64DecodeChars[c4];} while(i < len && c4 == -1);if(c4 == -1) break;out += String.fromCharCode(((c3 & 0x03) << 6) | c4); }out = UTF8To16(out); return out;}/** * 解决Base64加密中文字符错误的问题 */function UTF16To8(text) { var out = ""; for(var i = 0; i < text.length; i++) { var c = text.charCodeAt(i); if ((c >= 0x0001) && (c <= 0x007F)) { out += text.charAt(i); } else if (c > 0x07FF) { out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } else { out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } } return out;}/** * 解决Base64解密中文字符错误的问题 */function UTF8To16(text) {if (!text) {return;}var i, codes, bytes, out = [],len = text.length;for (i = 0; i < len; i++) {codes = [];codes.push(text.charCodeAt(i));if (((codes[0] >> 7) & 0xff) == 0x0) {//单字节 0xxxxxxx out.push(text.charAt(i));} else if (((codes[0] >> 5) & 0xff) == 0x6) {//双字节 110xxxxx 10xxxxxx codes.push(text.charCodeAt(++i));bytes = [];bytes.push(codes[0] & 0x1f);bytes.push(codes[1] & 0x3f);out.push(String.fromCharCode((bytes[0] << 6) | bytes[1]));} else if (((codes[0] >> 4) & 0xff) == 0xe) {//三字节 1110xxxx 10xxxxxx 10xxxxxx codes.push(text.charCodeAt(++i));codes.push(text.charCodeAt(++i));bytes = [];bytes.push((codes[0] << 4) | ((codes[1] >> 2) & 0xf));bytes.push(((codes[1] & 0x3) << 6) | (codes[2] & 0x3f));out.push(String.fromCharCode((bytes[0] << 8) | bytes[1]));}}return out.join('');}
阅读全文
0 0
- JS实现Base64加解密
- base64加、解密实现方法
- BASE64加解密实现方法
- 加解密之Base64实现
- JS实现base64加密解密
- JS实现base64加密解密
- js实现base64加密解密
- Base64加解密的实现方式
- 利用Java实现Base64加解密
- JS base64编码加解密、JS编码转换
- base64加解密
- Base64加解密详解
- base64加解密
- Base64 加解密
- Base64加解密
- base64加解密
- base64加解密
- Base64加解密方法
- 【转】C++多线程编程(入门实例)
- 【Scikit-Learn 中文文档】支持向量机
- s5pv210-Linux驱动之RTL8189WIFI模块
- css-定位元素水平居中
- django excel 导出
- JS实现Base64加解密
- 技术分享连载(七十七)
- spi核心层驱动模型简述
- jQuery $.proxy() 方法
- 基础算法
- spring实现事物的回滚
- 乡村美食传播想法
- Xshell 快捷键
- SpringBoot使用Shiro验证登录笔记