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 相关文章推荐
用jQuery与JSONP轻松解决跨域访问的问题
Feb 04 Javascript
超炫的jquery仿flash导航栏特效
Nov 11 Javascript
JavaScript页面模板库handlebars的简单用法
Mar 02 Javascript
js实现超酷的照片墙展示效果图附源码下载
Oct 08 Javascript
jQuery实现的超简单点赞效果实例分析
Dec 31 Javascript
JavaScript动态检验密码强度的实现方法
Nov 09 Javascript
从parcel.js打包出错到选择nvm的全部过程
Jan 23 Javascript
Node.js爬虫如何获取天气和每日问候详解
Aug 26 Javascript
js利用拖放实现添加删除
Aug 27 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
Sep 08 Javascript
Vue自定义表单内容检查rules实例
Oct 30 Javascript
Js数组扁平化实现方法代码总汇
Nov 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实现短信发送代码
2015/07/05 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
Jquery练习之表单验证实现代码
2010/12/14 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
python多进程读图提取特征存npy
2019/05/21 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
学生发电厂实习自我鉴定
2013/09/22 职场文书
办公室岗位职责
2014/02/12 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
工作简报怎么写
2015/07/21 职场文书
退休欢送会致辞
2015/07/31 职场文书