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 相关文章推荐
类似CSDN图片切换效果脚本
Sep 17 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
Apr 01 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
Dec 17 Javascript
JavaScript与HTML的结合方法详解
Nov 23 Javascript
浅谈jQuery 选择器和dom操作
Jun 07 Javascript
修改jquery中dialog的title属性方法(推荐)
Aug 26 Javascript
JavaScript实现二维坐标点排序效果
Jul 18 Javascript
基于DOM节点删除之empty和remove的区别(详解)
Sep 11 Javascript
React项目动态设置title标题的方法示例
Sep 26 Javascript
浅谈Vuex注入Vue生命周期的过程
May 20 Javascript
微信公众号开发之微信支付代码记录的实现
Oct 16 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
Jul 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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
2014/06/05 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
微信小程序身份证验证方法实现详解
2019/06/28 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
python实现教务管理系统
2018/03/12 Python
Python中的asyncio代码详解
2019/06/10 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python科学计算之narray对象用法
2019/11/25 Python
Pycharm小白级简单使用教程
2020/01/08 Python
Python各种扩展名区别点整理
2020/02/27 Python
django ORM之values和annotate使用详解
2020/05/19 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
搬家公司的创业计划书
2014/01/01 职场文书
行政专员的岗位职责
2014/03/10 职场文书
运动会3000米加油稿
2015/07/21 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书