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 相关文章推荐
javascript 屏蔽鼠标键盘的几段代码
Jan 02 Javascript
jquery下组织javascript代码(js函数化)
Aug 25 Javascript
javascript定义变量时加var与不加var的区别
Dec 22 Javascript
jQuery中delegate()方法用法实例
Jan 19 Javascript
js实现屏幕自适应局部代码分享
Jan 30 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
Sep 14 Javascript
JS实现获取当前所在周的周六、周日示例分析
May 11 Javascript
微信小程序云开发详细教程
May 16 Javascript
JS实现的对象去重功能示例
Jun 04 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
Aug 14 Javascript
Javascript基于OOP实实现探测器功能代码实例
Aug 26 Javascript
html5调用摄像头截图功能
Jan 18 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实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
JS画5角星方法介绍
2013/09/17 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
javascript 定时器工作原理分析
2016/12/03 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
vue模块拖拽实现示例代码
2019/03/09 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
python中pyplot基础图标函数整理
2020/11/10 Python
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
戴森英国官网:Dyson英国
2019/05/07 全球购物
保护环境建议书
2014/03/12 职场文书
经管应届生求职信范文
2014/05/18 职场文书
学术诚信承诺书
2014/05/26 职场文书
三八活动策划方案
2014/08/17 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript