JavaScript Base64加解密
Base64加密算法是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
下面是Base64加密、解密算法的简单实现(不支持中文):
function base64Encrypt(baseString) {
var base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var length = baseString.length;
var loopNo = parseInt(length / 3);
var charOne, charTwo, charThree;
var out = "";
for (var i = 0, j = 0; j < loopNo; j++) {
charOne = baseString.charCodeAt(i++);
charTwo = baseString.charCodeAt(i++);
charThree = baseString.charCodeAt(i++);
out += base64Chars.charAt(charOne >> 2);
out += base64Chars.charAt(((charOne & 0x3) << 4) | ((charTwo & 0xF0) >> 4));
out += base64Chars.charAt(((charTwo & 0xF) << 2) | ((charThree & 0xC0) >> 6));
out += base64Chars.charAt(charThree & 0x3F);
}
if (i === length) {
return out;
}
charOne = baseString.charCodeAt(i++) & 0xff;
out += base64Chars.charAt(charOne >> 2);
if (i === length) {
out += base64Chars.charAt((charOne & 0x3) << 4);
out += "==";
} else {
charTwo = baseString.charCodeAt(i++);
out += base64Chars.charAt(((charOne & 0x3) << 4) | ((charTwo & 0xF0) >> 4));
out += base64Chars.charAt((charTwo & 0xF) << 2);
out += "=";
}
return out;
}
function base64Encode(baseSting) {
var base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var length = baseSting.length;
var chara1, chara2, chara3;
var out = "", i = 0;
while (i < length) {
chara1 = baseSting.charCodeAt(i++) & 0xff;
out += base64Chars.charAt(chara1 >> 2);
if (i == length) {
out += base64Chars.charAt((chara1 & 0x3) << 4);
out += "==";
break;
}
chara2 = baseSting.charCodeAt(i++);
if (i == length) {
out += base64Chars.charAt(((chara1 & 0x3) << 4) | ((chara2 & 0xF0) >> 4));
out += base64Chars.charAt((chara2 & 0xF) << 2);
out += "=";
break;
}
chara3 = baseSting.charCodeAt(i++);
out += base64Chars.charAt(((chara1 & 0x3) << 4) | ((chara2 & 0xF0) >> 4));
out += base64Chars.charAt(((chara2 & 0xF) << 2) | ((chara3 & 0xC0) >> 6));
out += base64Chars.charAt(chara3 & 0x3F);
}
return out;
}
function base64Decode(baseString) {
var base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var length = baseString.length;
var charI, charII, charIII, charIV;
var out = "", i = 0;
if (0 < length && 0 === length % 4) {
if (/^[A-Za-z0-9\+/]{2,}={0,2}$/.test(baseString)) {
while (i < length - 4) {
charI = base64Chars.indexOf(baseString.charAt(i++));
charII = base64Chars.indexOf(baseString.charAt(i++));
charIII = base64Chars.indexOf(baseString.charAt(i++));
charIV = base64Chars.indexOf(baseString.charAt(i++));
out += String.fromCharCode((charI << 2) | ((charII & 0x30) >> 4));
out += String.fromCharCode(((charII & 0xF) << 4) | ((charIII & 0x3C) >> 2));
out += String.fromCharCode(((charIII & 0x3) << 6) | charIV);
}
charI = base64Chars.indexOf(baseString.charAt(i++));
charII = base64Chars.indexOf(baseString.charAt(i++));
out += String.fromCharCode((charI << 2) | ((charII & 0x30) >> 4));
switch (baseString.indexOf("=")) {
case length - 1:
charIII = base64Chars.indexOf(baseString.charAt(i++));
out += String.fromCharCode(((charII & 0xF) << 4) | ((charIII & 0x3C) >> 2));
break;
case -1:
charIII = base64Chars.indexOf(baseString.charAt(i++));
charIV = base64Chars.indexOf(baseString.charAt(i++));
out += String.fromCharCode(((charII & 0xF) << 4) | ((charIII & 0x3C) >> 2));
out += String.fromCharCode(((charIII & 0x3) << 6) | charIV);
}
} else {
throw new Error(baseString + " does not base64 encoded string.");
}
} else {
throw new Error(baseString + " does not base64 encoded string.");
}
return out;
}
JavaScript Base64加解密的更多相关文章
- java base64加解密
接上篇java Base64算法. 根据之前过程使用base64加解密,所以写成了工具类. 代码示例; public class Base64Util { private static Logger ...
- QuickBase64 - Android 下拉通知栏快捷base64加解密工具
Android Quick Setting Tile Base64 Encode/Decode Tool Android 下拉通知栏快捷 base64 加解密,自动将剪切板的内容进行 base64 E ...
- JAVA加解密 -- Base64加解密
Base64算法实现:可以将任意的字节数组数据,通过算法,生成只有(大小写英文.数字.+./)(一共64个字符)内容表示的字符串数据. private static final String str ...
- base64加解密字符串
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- oracle里面base64加解密
1. base64 的解密函数select utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('dGVzdA= ...
- java之BASE64加解密
1.简介 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到. 注:位于jdk的java.util包中. 2. ...
- Python AES - base64 加解密
首先python引用AES加密 from Crypto.Cipher import AES 需要先安装 Crypto 模块, 可以使用 easy_install 进行安装 会自动去官网进行搜索 ...
- 使用Apache的Base64类实现Base64加解密
包名称:org.apache.commons.codec.binary 类名称:org.apache.commons.codec.binary.Base64 1.Base64加密 public sta ...
- Base64 加解密
import java.io.UnsupportedEncodingException; import org.apache.tomcat.util.codec.binary.Base64; /** ...
随机推荐
- spring管理配置文件的工厂类--PropertiesFactoryBean
使用这个工厂的配置,可以很方便的获取配置文件中的属性.具体使用如下; 对于属性配置,一般采用的是键值对的形式,如: key=value 属性配置文件一般使用的是XXX.properties,当然有时候 ...
- 文件描述符与FILE
1. 文件描述符(重点) 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创 ...
- Python:一篇文章掌握Numpy的基本用法
前言 Numpy是一个开源的Python科学计算库,它是python科学计算库的基础库,许多其他著名的科学计算库如Pandas,Scikit-learn等都要用到Numpy库的一些功能. 本文主要内容 ...
- WPF MVVM 架构 Step By Step(3)(把后台代码移到一个类中)
我觉得大部分开发者应该已经知道怎么去解决这个问题.一般都是把后台代码(GLUE code)移动到一个类库.这个类库用来代表UI的属性和行为.任何代码当被移到一个类库中时都可以被编译成一个DLL,然后可 ...
- 循环执行sql语句
DECLARE --声明变量 SQL_ALLTABLES LONG; SQL_INSERT LONG; TYPE THE_CURSOR_TYPE IS REF CURSOR; --定义引用游标的数据类 ...
- [转] 传说中的WCF(2):服务协定的那些事儿
上一篇文章中,我们抛出了N个问题:WCF到底难不难学?复杂吗?如果复杂,可以化繁为简吗? 其实,这些问题的答案全取决于你的心态,都说“态度决定一切”,这句话,不知道各位信不信,反正我是信了.首先,敢于 ...
- MHD simulation with python
这里为MHD(磁流体力学)模拟做一些准备,可能现在学习物理的人从某种程度上也得变成程序猿吧.MHD模拟面临的问题是求解一个三维的偏微分方程组,其中涉及的流体元格点非常多.所以希望先从简单的一维模型出发 ...
- 【Android Developers Training】 79. 连接到网络
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- DOCKER 从入门到放弃(一)
前言 关于docker的各种概念已有各位大神珠玉在前,请各位自行查看,本系列的目的是各种详细操作步骤 各种概念特别推荐CloudMan的3篇blog: http://www.cnblogs.com/C ...
- Mathematica学习笔记2
导入文件中的矩阵 mat = Import["...", "Table"] 转化为向量矩阵(元素为数对) data = Table[{mat[[i, j]], ...