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

最近刚发现的一个比较简单的代码支持utf8,可以直接拿来使用。
function bs64DeCode(str) {
_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function _utf8_decode(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n < e.length) {
r = e.charCodeAt(n);
if (r < 128) {
t += String.fromCharCode(r);
n++
} else if (r > 191 && r < 224) {
c2 = e.charCodeAt(n + 1);
t += String.fromCharCode((r & 31) << 6 | c2 & 63);
n += 2
} else {
c2 = e.charCodeAt(n + 1);
c3 = e.charCodeAt(n + 2);
t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
n += 3
}
}
return t
}
function decode(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;
}
return decode(str);
}
// 字符串转base64
function b64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);
}));
}
下方是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的加密解密方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# js实现base64
# js实现base64 加密 解密
# JavaScript实现的前端AES加密解密功能【基于CryptoJS】
# JavaScript实现的简单加密解密操作示例
# JS实现的3des+base64加密解密算法完整示例
# JS实现的base64加密解密操作示例
# 原生js的RSA和AES加密解密算法
# 两种JavaScript的AES加密方式(可与Java相互加解密)
# JS实现的base64加密解密完整实例
# Js base64 加密解密介绍
# JavaScript加密解密7种方法总结分析
# JavaScript实现加密与解密详解
# 加密解密
# 小编
# 就会
# 在此
# 给大家
# 可以直接
# 这几天
# 一个问题
# 要将
# 所述
# 给我留言
# 感谢大家
# 疑问请
# 有任何
# 加解密
# charCodeAt
# length
# String
# var
# _utf8_decode
相关文章:
建站之星在线版空间:自助建站+智能模板一键生成方案
如何快速使用云服务器搭建个人网站?
高端网站建设与定制开发一站式解决方案 中企动力
教学论文网站制作软件有哪些,写论文用什么软件
?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
建站主机核心功能解析:服务器选择与网站搭建流程指南
建站之星如何修改网站生成路径?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
建站org新手必看:2024最新搭建流程与模板选择技巧
如何在局域网内绑定自建网站域名?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
定制建站如何定义?其核心优势是什么?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
已有域名和空间如何快速搭建网站?
网站制作企业,网站的banner和导航栏是指什么?
微信推文制作网站有哪些,怎么做微信推文,急?
如何在云主机上快速搭建多站点网站?
如何在阿里云香港服务器快速搭建网站?
高防服务器如何保障网站安全无虞?
实例解析Array和String方法
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
制作销售网站教学视频,销售网站有哪些?
详解jQuery中基本的动画方法
建站之星代理如何优化在线客服效率?
如何配置IIS站点权限与局域网访问?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
如何选择建站程序?包含哪些必备功能与类型?
如何在西部数码注册域名并快速搭建网站?
如何获取上海专业网站定制建站电话?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
网页设计与网站制作内容,怎样注册网站?
重庆市网站制作公司,重庆招聘网站哪个好?
制作企业网站建设方案,怎样建设一个公司网站?
如何用虚拟主机快速搭建网站?详细步骤解析
香港服务器建站指南:免备案优势与SEO优化技巧全解析
一键网站制作软件,义乌购一件代发流程?
建站之星安装后界面空白如何解决?
建站之星后台管理系统如何操作?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
建站之星与建站宝盒如何选择最佳方案?
如何在宝塔面板创建新站点?
定制建站方案优化指南:企业官网开发与建站费用解析
建站之星安装步骤有哪些常见问题?
清除minerd进程的简单方法
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
如何选择高性价比服务器搭建个人网站?
建站之星后台管理如何实现高效配置?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何在IIS7上新建站点并设置安全权限?
*请认真填写需求信息,我们会在24小时内与您取得联系。