JS 实现Base64编码与解码实例详解


Posted in Javascript onNovember 07, 2016

Js实现Base64编码与解码

Base64其实是一种简单的置换加密方式,但是BASE64的用处往往并不是为了防止信息泄露,而且为了方便传输,进过BASE64编码后的信息会比原始信息长,大概是4/3倍。

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME, 在XML中存储复杂数据。

1.加密解密方法使用:

//1.加密 
var str = '124中文内容'; 
var base = new Base64(); 
var result = base.encode(str); 
//document.write(result); 
//2.解密 
var result2 = base.decode(result); 
document.write(result2);

2.加密、解密算法封装:

/** 
* 
* Base64 encode / decode 
* 
* @author haitao.tu 
* @date 2010-04-26 
* @email tuhaitao@foxmail.com 
* 
*/ 
function Base64() { 
 
 // private property 
 _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 
 
 // public method for encoding 
 this.encode = function (input) { 
  var output = ""; 
  var chr1, chr2, chr3, enc1, enc2, enc3, enc4; 
  var i = 0; 
  input = _utf8_encode(input); 
  while (i < input.length) { 
   chr1 = input.charCodeAt(i++); 
   chr2 = input.charCodeAt(i++); 
   chr3 = input.charCodeAt(i++); 
   enc1 = chr1 >> 2; 
   enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 
   enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 
   enc4 = chr3 & 63; 
   if (isNaN(chr2)) { 
    enc3 = enc4 = 64; 
   } else if (isNaN(chr3)) { 
    enc4 = 64; 
   } 
   output = output + 
   _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + 
   _keyStr.charAt(enc3) + _keyStr.charAt(enc4); 
  } 
  return output; 
 } 
 
 // public method for decoding 
 this.decode = function (input) { 
  var output = ""; 
  var chr1, chr2, chr3; 
  var enc1, enc2, enc3, enc4; 
  var i = 0; 
  input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 
  while (i < input.length) { 
   enc1 = _keyStr.indexOf(input.charAt(i++)); 
   enc2 = _keyStr.indexOf(input.charAt(i++)); 
   enc3 = _keyStr.indexOf(input.charAt(i++)); 
   enc4 = _keyStr.indexOf(input.charAt(i++)); 
   chr1 = (enc1 << 2) | (enc2 >> 4); 
   chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 
   chr3 = ((enc3 & 3) << 6) | enc4; 
   output = output + String.fromCharCode(chr1); 
   if (enc3 != 64) { 
    output = output + String.fromCharCode(chr2); 
   } 
   if (enc4 != 64) { 
    output = output + String.fromCharCode(chr3); 
   } 
  } 
  output = _utf8_decode(output); 
  return output; 
 } 
 
 // private method for UTF-8 encoding 
 _utf8_encode = function (string) { 
  string = string.replace(/\r\n/g,"\n"); 
  var utftext = ""; 
  for (var n = 0; n < string.length; n++) { 
   var c = string.charCodeAt(n); 
   if (c < 128) { 
    utftext += String.fromCharCode(c); 
   } else if((c > 127) && (c < 2048)) { 
    utftext += String.fromCharCode((c >> 6) | 192); 
    utftext += String.fromCharCode((c & 63) | 128); 
   } else { 
    utftext += String.fromCharCode((c >> 12) | 224); 
    utftext += String.fromCharCode(((c >> 6) & 63) | 128); 
    utftext += String.fromCharCode((c & 63) | 128); 
   } 
 
  } 
  return utftext; 
 } 
 
 // private method for UTF-8 decoding 
 _utf8_decode = function (utftext) { 
  var string = ""; 
  var i = 0; 
  var c = c1 = c2 = 0; 
  while ( i < utftext.length ) { 
   c = utftext.charCodeAt(i); 
   if (c < 128) { 
    string += String.fromCharCode(c); 
    i++; 
   } else if((c > 191) && (c < 224)) { 
    c2 = utftext.charCodeAt(i+1); 
    string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); 
    i += 2; 
   } else { 
    c2 = utftext.charCodeAt(i+1); 
    c3 = utftext.charCodeAt(i+2); 
    string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); 
    i += 3; 
   } 
  } 
  return string; 
 } 
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
jquery 插件学习(六)
Aug 06 Javascript
js判断变量是否未定义的代码
Mar 28 Javascript
javascript函数作用域学习示例(js作用域)
Jan 13 Javascript
JS实现的手机端精简幻灯片效果
Sep 05 Javascript
详解Angular2中Input和Output用法及示例
May 21 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
JS分页的实现(同步与异步)
Sep 16 Javascript
图片懒加载imgLazyLoading.js使用详解
Sep 15 Javascript
基于Vue 服务端Cookies删除的问题
Sep 21 Javascript
jQuery简单实现根据日期计算星期几的方法
Jan 09 jQuery
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
Apr 10 Javascript
JavaScript生成随机验证码代码实例
Sep 28 Javascript
百度多文件异步上传控件webuploader基本用法解析
Nov 07 #Javascript
Angularjs的Controller间通信机制实例分析
Nov 07 #Javascript
jquery组件WebUploader文件上传用法详解
Oct 23 #Javascript
Vue.js 和 MVVM 的注意事项
Nov 07 #Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
Nov 07 #Javascript
基于Phantomjs生成PDF的实现方法
Nov 07 #Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
Nov 07 #Javascript
You might like
PHP6 mysql连接方式说明
2009/02/09 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
一个实用的php验证码类
2017/07/06 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
读书小明星事迹材料
2014/05/03 职场文书
村庄环境整治方案
2014/05/15 职场文书
森林病虫害防治方案
2014/06/02 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
电影圆明园观后感
2015/06/03 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
Python中相见恨晚的技巧
2021/04/13 Python
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang
OpenFeign实现远程调用
2022/08/14 Java/Android