Javascript实现base64的加密解密方法示例


Posted in Javascript onJune 27, 2017

这几天使用PHP向前端传值的时候,遇到一个问题,要将代码传过去赋值。如果使用urlencode()和urldecode()函数,就会出现js无法解码的情况,因为php和js的相关函数算法不一致。于是准备使用通用的base64加密解密。

base64 加密解密

下方是base64用javascript写出来的函数和方法。

//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.加密、解密算法封装:
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实现base64的加密解密方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
一个基于jquery的文本框记数器
Sep 19 Javascript
通过实例理解javascript中没有函数重载的概念
Jun 03 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
Jan 09 Javascript
详谈JavaScript的闭包及应用
Jan 17 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
Jan 19 Javascript
详解react-router如何实现按需加载
Jun 15 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
Aug 15 Javascript
详解vue 组件的实现原理
Nov 12 Javascript
ant design pro中可控的筛选和排序实例
Nov 17 Javascript
解决elementui表格操作列自适应列宽
Dec 28 Javascript
JS监听Esc 键触发事键
Apr 14 Javascript
微信小程序 空白页重定向解决办法
Jun 27 #Javascript
ionic 自定义弹框效果
Jun 27 #Javascript
js脚本编写简单刷票投票系统
Jun 27 #Javascript
详解Vue.js搭建路由报错 router.map is not a function
Jun 27 #Javascript
详解vue.js的事件处理器v-on:click
Jun 27 #Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
Jun 27 #Javascript
Vue.js常用指令之循环使用v-for指令教程
Jun 27 #Javascript
You might like
php中的时间显示
2007/01/18 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
Django 拆分model和view的实现方法
2019/08/16 Python
python excel转换csv代码实例
2019/08/26 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
工程师自我评价怎么写
2013/09/19 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
护理职业生涯规划书
2014/01/24 职场文书
学校安全检查制度
2014/01/27 职场文书
寄语学生的话
2014/04/10 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
早会开场白台词大全
2015/06/01 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL