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合并表格中具有相同内容单元格示例
Aug 11 Javascript
原始的js代码和jquery对比体会
Sep 10 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
Sep 23 Javascript
jquery 日期控件datepicker属性详细解析
Nov 08 Javascript
jQuery中removeProp()方法用法实例
Jan 05 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
Mar 04 Javascript
JS实现的5级联动Select下拉选择框实例
Aug 17 Javascript
Vue.js第三天学习笔记(计算属性computed)
Dec 01 Javascript
jQuery ajax动态生成table功能示例
Jun 14 jQuery
JS判断非空至少输入两个字符的简单实现方法
Jun 23 Javascript
Vue中建立全局引用或者全局命令的方法
Aug 21 Javascript
如何使用vuex实现兄弟组件通信
Nov 02 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安装问题
2006/10/09 PHP
php后门URL的防范
2013/11/12 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
PHP实现文件上传与下载
2020/08/28 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
python解析xml文件操作实例
2014/10/05 Python
快速了解Python相对导入
2018/01/12 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
Python如何输出警告信息
2020/07/30 Python
介绍一下gcc特性
2015/10/31 面试题
求职简历自荐信
2013/10/20 职场文书
出国留学自荐信
2013/10/25 职场文书
学校联谊活动方案
2014/02/15 职场文书
低碳环保倡议书
2014/04/14 职场文书
酒店节能降耗方案
2014/05/08 职场文书
初中学校军训方案
2014/05/09 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
学生退学证明
2015/06/23 职场文书
公司回复函格式
2015/07/14 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
浅谈Python3中datetime不同时区转换介绍与踩坑
2021/08/02 Python