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加解密的更多相关文章

  1. java base64加解密

    接上篇java Base64算法. 根据之前过程使用base64加解密,所以写成了工具类. 代码示例; public class Base64Util { private static Logger ...

  2. QuickBase64 - Android 下拉通知栏快捷base64加解密工具

    Android Quick Setting Tile Base64 Encode/Decode Tool Android 下拉通知栏快捷 base64 加解密,自动将剪切板的内容进行 base64 E ...

  3. JAVA加解密 -- Base64加解密

    Base64算法实现:可以将任意的字节数组数据,通过算法,生成只有(大小写英文.数字.+./)(一共64个字符)内容表示的字符串数据. private static final String str ...

  4. base64加解密字符串

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  5. oracle里面base64加解密

    1. base64 的解密函数select utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('dGVzdA= ...

  6. java之BASE64加解密

    1.简介 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到. 注:位于jdk的java.util包中. 2. ...

  7. Python AES - base64 加解密

    首先python引用AES加密 from Crypto.Cipher import AES 需要先安装  Crypto  模块, 可以使用 easy_install 进行安装   会自动去官网进行搜索 ...

  8. 使用Apache的Base64类实现Base64加解密

    包名称:org.apache.commons.codec.binary 类名称:org.apache.commons.codec.binary.Base64 1.Base64加密 public sta ...

  9. Base64 加解密

    import java.io.UnsupportedEncodingException; import org.apache.tomcat.util.codec.binary.Base64; /** ...

随机推荐

  1. 从《海贼王》的视角走进BAT的世界(百度/阿里/腾讯)

    在伟大航路后半段--新世界,有三位君临天下的海上枭雄,就犹如海上皇帝一般,被人们称为"三皇",他们是--洛宾·里(Robin·Li),杰克·马(Jack·Ma)和波尼(pony)! ...

  2. Bash启动选项

    Bash选项可以用来控制它的行为,有两种选项:单字符选项和多字符选项,多字符选项必须出现在单字符选项以前.1)单字符选项:由一个减号和一个字符组成2)多字符选项:由两个减号和多个字符组成 常用选项:- ...

  3. react-native-fs插件的使用以及遇到的坑

    react-native-fs插件是文件对上传和下载时使用的,iOS和android都可使用,File upload (iOS only). 安装命令: npm install react-nativ ...

  4. php中常用的处理字符串的函数

    1.将字符串转换为数组的函数:str_split() array str_split ( string $string [, int $split_length = 1 ] ) string:输入字符 ...

  5. CentOS7安装docker 启动不了解决篇

    [root@test ~]# yum update [root@test ~]# yum install docker [root@test ~]# service docker start Redi ...

  6. 关于MATLAB处理大数据坐标文件2017624

    经过一个下午找资料,已作出人工轨迹记录程序,这样就可以增加样本容量 接下来三个方向:特征.决策树.机械轨迹程序 虽然机械轨迹的程序相对好做,但是现有机械轨迹程序太过于死板,不能自行更改轨迹

  7. java http请求,字节流获取百度数据

    请求的地址为: http://api.map.baidu.com/place/v2/search?&q=%E9%A5%AD%E5%BA%97&region=%E9%87%8D%E5%B ...

  8. 浅谈Cordova框架的一些理解

    前言 因为工作原因,最近需要研究Cordova框架,看了其中的源码和实现方式,当场在看的时候马上能理解,但是事后再回去看相关源码时候却发现之前理解的内容又忘记了,又不得不重新开始看,所以总觉得需要记录 ...

  9. C#实现手机发送验证码

    之前不怎么了解这个,一直以为做起来很复杂. 直到前两天公司要求要做这个功能. 做了之后才发现 这不过就是一个POST请求就能实现的东西.现在给大家分享一下,有不足之处还请多多指教. 废话不多说 直接上 ...

  10. 遇到scan configurtation CDT builder等的错误

    可以直接propoerty中的builder中把这两项删除