Javascript base64编码实现代码


Posted in Javascript onDecember 02, 2011
/* 
* base64编码 
*/ 
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); 
function base64encode(str) { 

var out, i, len; 

var c1, c2, c3; 

len = str.length; 

i = 0; 

out = ""; 

while(i < len) { 
c1 = str.charCodeAt(i++) & 0xff; 
if(i == len) 
{ 
out += base64EncodeChars.charAt(c1 >> 2); 

 out += base64EncodeChars.charAt((c1 & 0x3) << 4); 

 out += "=="; 

 break; 
} 
c2 = str.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 = str.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; 
} 
function base64decode(str) { 

var c1, c2, c3, c4; 

var i, len, out; 

len = str.length; 

i = 0; 

out = ""; 

while(i < len) { 
/* c1 */ 
do { 

 c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; 
} while(i < len && c1 == -1); 
if(c1 == -1) 

 break; 
/* c2 */ 
do { 

 c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; 
} while(i < len && c2 == -1); 
if(c2 == -1) 

 break; 
out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); 
/* c3 */ 
do { 

 c3 = str.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)); 
/* c4 */ 
do { 

 c4 = str.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); 

 } 

return out; 
} 
function utf16to8(str) { 

var out, i, len, c; 

out = ""; 

len = str.length; 

for(i = 0; i < len; i++) { 
c = str.charCodeAt(i); 
if ((c >= 0x0001) && (c <= 0x007F)) { 

 out += str.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; 
} 
function utf8to16(str) { 

var out, i, len, c; 

var char2, char3; 

out = ""; 

len = str.length; 

i = 0; 

while(i < len) { 
c = str.charCodeAt(i++); 
switch(c >> 4) 
{ 
  case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: 

 // 0xxxxxxx 

 out += str.charAt(i-1); 

 break; 
  case 12: case 13: 

 // 110x xxxx  10xx xxxx 

 char2 = str.charCodeAt(i++); 

 out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); 

 break; 
  case 14: 

 // 1110 xxxx 10xx xxxx 10xx xxxx 

 char2 = str.charCodeAt(i++); 

 char3 = str.charCodeAt(i++); 

 out += String.fromCharCode(((c & 0x0F) << 12) | 


((char2 & 0x3F) << 6) | 


((char3 & 0x3F) << 0)); 

 break; 
} 
} 

return out; 
} 
/* 
* base64编码 End 
*/ 
var m = 'hello'; 
m = base64encode(m);

这是一个例子:
<HTML> 
<HEAD> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<TITLE>Javascript Base64 Demo</TITLE> 
<script language=javascript> 
/* 
* base64编码 
*/ 
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); 
function base64encode(str) { 

var out, i, len; 

var c1, c2, c3; 

len = str.length; 

i = 0; 

out = ""; 

while(i < len) { 
c1 = str.charCodeAt(i++) & 0xff; 
if(i == len) 
{ 
out += base64EncodeChars.charAt(c1 >> 2); 

 out += base64EncodeChars.charAt((c1 & 0x3) << 4); 

 out += "=="; 

 break; 
} 
c2 = str.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 = str.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; 
} 
function base64decode(str) { 

var c1, c2, c3, c4; 

var i, len, out; 

len = str.length; 

i = 0; 

out = ""; 

while(i < len) { 
/* c1 */ 
do { 

 c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; 
} while(i < len && c1 == -1); 
if(c1 == -1) 

 break; 
/* c2 */ 
do { 

 c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; 
} while(i < len && c2 == -1); 
if(c2 == -1) 

 break; 
out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); 
/* c3 */ 
do { 

 c3 = str.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)); 
/* c4 */ 
do { 

 c4 = str.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); 

 } 

return out; 
} 
function utf16to8(str) { 

var out, i, len, c; 

out = ""; 

len = str.length; 

for(i = 0; i < len; i++) { 
c = str.charCodeAt(i); 
if ((c >= 0x0001) && (c <= 0x007F)) { 

 out += str.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; 
} 
function utf8to16(str) { 

var out, i, len, c; 

var char2, char3; 

out = ""; 

len = str.length; 

i = 0; 

while(i < len) { 
c = str.charCodeAt(i++); 
switch(c >> 4) 
{ 
  case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: 

 // 0xxxxxxx 

 out += str.charAt(i-1); 

 break; 
  case 12: case 13: 

 // 110x xxxx  10xx xxxx 

 char2 = str.charCodeAt(i++); 

 out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); 

 break; 
  case 14: 

 // 1110 xxxx 10xx xxxx 10xx xxxx 

 char2 = str.charCodeAt(i++); 

 char3 = str.charCodeAt(i++); 

 out += String.fromCharCode(((c & 0x0F) << 12) | 


((char2 & 0x3F) << 6) | 


((char3 & 0x3F) << 0)); 

 break; 
} 
} 

return out; 
} 
/* 
* base64编码 End 
*/ 
function doit() { 

var f = document.f 

f.output.value = base64encode(utf16to8(f.source.value)) 

f.decode.value = utf8to16(base64decode(f.output.value)) 
} 
</script> 
</HEAD> 
<BODY> 
<H1>Javascript Base64 Demo</H1> 
<FORM NAME="f"> 
原码<BR> 
<TEXTAREA NAME="source" ROWS=4 COLS=80 WRAP="soft"></TEXTAREA><BR><BR> 
Base64 encode<BR> 
<TEXTAREA NAME="output" ROWS=4 COLS=80 WRAP="soft"></TEXTAREA><BR><BR> 
Base64 decode<BR> 
<TEXTAREA NAME="decode" ROWS=4 COLS=80 WRAP="soft"></TEXTAREA><BR><BR> 
<INPUT TYPE=BUTTON VALUE="转换" ONCLICK="doit();"> 
</FORM> 
</BODY> 
</html>
Javascript 相关文章推荐
仅Firefox中链接A无法实现模拟点击以触发其默认行为
Jul 31 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
Jul 29 Javascript
JS基于Ajax实现的网页Loading效果代码
Oct 27 Javascript
JS对HTML表格进行增删改操作
Aug 22 Javascript
js实现页面刷新滚动条位置不变
Nov 27 Javascript
localStorage的黑科技-js和css缓存机制
Feb 06 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
May 03 Javascript
Nuxt.js踩坑总结分享
Jan 18 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
Apr 08 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
Sep 27 Javascript
VSCode 配置uni-app的方法
Jul 11 Javascript
JS获取页面窗口大小的代码解读
Dec 01 #Javascript
基于JQuery的抓取博客园首页RSS的代码
Dec 01 #Javascript
jQuery 中使用JSON的实现代码
Dec 01 #Javascript
jquery中dom操作和事件的实例学习 下拉框应用
Dec 01 #Javascript
JS代码放在head和body中的区别分析
Dec 01 #Javascript
js获取浏览器的可视区域尺寸的实现代码
Nov 30 #Javascript
js取滚动条的尺寸的函数代码
Nov 30 #Javascript
You might like
调整PHP的性能
2013/10/30 PHP
php自定义错误处理用法实例
2015/03/20 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
Python中的推导式使用详解
2015/06/03 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
《Python学习手册》学习总结
2018/01/17 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
python实现浪漫的烟花秀
2019/01/30 Python
python统计中文字符数量的两种方法
2019/01/31 Python
python实现顺时针打印矩阵
2019/03/02 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
会计电算化专业毕业生推荐信
2013/12/24 职场文书
交通事故调解协议书
2014/04/16 职场文书
护士实习求职信
2014/06/22 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
Golang 并发编程 SingleFlight模式
2022/04/26 Golang