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; /** ... 
随机推荐
- 关于AD9516芯片的硬件设计和FPGA程序编写心得
			最近在做一个项目,其中有涉及时钟芯片AD9516的硬件设计和软件编程,有些使用心得,供大家参考讨论. AD9516,这是一个由ADI公司设计的14路输出时钟发生器,具有亚皮秒级抖动性能,还配有片内集成 ... 
- js变量提升和函数提升
			变量,作为编程语言最基础的部分,每种语言的变量不尽相同,但又大径相庭.大部分编程语言的变量有块级作用域,如if.for.while... 但JavaScript不纯在块级作用域,而是函数作用域,并且有 ... 
- Python给小说做词云
			闲暇时间喜欢看小说,就想着给小说做词云,展示小说的主要内容.开发语言是Python,主要用到的库有wordcloud.jieba.scipy.代码很简单,首先用jieba.cut()函数做分词,生成以 ... 
- Idea 常用功能汇总,工作中常用技巧
			1.隐藏没用到的文件 比如 IDEA 的项目配置文件(.iml 和.idea),打开 Settings-File Types, 加入要隐藏的文件后缀. 2.常用技巧 2.1 通过Alt+F8查看变量 ... 
- H5拖拽  构造拖拽及缩放  pdf展示
			前言: 协助项目需要实现一个签名的功能. 功能说明:1.有文本签名和头像签名.2.头像签名需要实现可拖拽功能.3.需要展示的是pdf的文件并需要获取签名位于pdf文件的相对位置. 功能一:实现拖拽 思 ... 
- python 标准库 -- shutil
			shutil shutil.move(src,dst) shutil.move('/tmp/20170223/new','/tmp/20170223/test') # 移动文件, 重命名等 shuti ... 
- Java Web开发环境配置(JDK+Tomcat++IDEA 14)
			对于未接触过java web开发的大家而言,应该和我一样对java web编程开发比较迷茫,通过查一些资料,大致清楚了java web开发环境的一些基本配置,未做过相关编程的人员可以看一看,由于我刚接 ... 
- 各开放平台API接口通用SDK序列文章    前言
			最近两年一直在做API接口相关的工作,在平时工作中以及网上看到很多刚接触API接口调用的新人一开始会感到很不适应,要看的文档一大堆,自己要调用的接口找不着,或都找着了不知道怎么去调用,记得包括自己刚开 ... 
- 关于MATLAB处理大数据坐标文件201762
			经过头脑风暴法想出了很多特征,目前经过筛选已经提交了两次数据,数据提交结果不尽如人意,但是收获很大. 接下来继续提取特征,特征数达到27时筛选出20条特征,并找出最佳搭配 
- Redis 数据类型介绍
			http://qifuguang.me/2015/09/29/Redis%E4%BA%94%E7%A7%8D%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E4%BB%8B% ... 
