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. 本地修改js代码并时时生效的解决办法

    js作为客户端语言(当然它也可以作服务端语言),非常强悍,一般情况下,我们都是在开发阶段不停的改,然后上线之后就作为稳定运行的代码. 然而有时候可能因为js写得有问题,导致上线后,某些功能无法使用,这 ...

  2. cpp(第五章)

    1.副作用,指的是在计算表达式时对某些东西(如存储在变量的值)进行修改:顺序点,是程序执行过程中的一个点,在这里,进入下一步之前将确保对所有的副作用 都进行评估.(分号就是一个顺序点).for exa ...

  3. Mac 上所有的命令行相关问题的总结

    1. java 系列命令 jdk,jar,war等等文件的执行方式 2. brew 系列命令 安装各种其他程序的命令例如:jenkins,MySQL,openssl brew list   列出所有的 ...

  4. 基于docker的 Hyperledger Fabric 多机环境搭建(上)

    环境:ubuntu 16.04 Docker  17.04.0-ce go 1.7.4 consoul v0.8.0.4 ======================================= ...

  5. Spring学习(9)--- @Autowired注解(二)

    可以使用@Autowired注解那些众所周知的解析依赖性接口,比如:BeanFactory,ApplicationContext,Environment,ResourceLoader,Applicat ...

  6. 《Python编程从入门到实践》_第五章_if语句

    条件测试 每条if语句的核心都是一个值为Ture或False的表达式,这种表达式被称为为条件测试.Python根据条件测试的值为Ture还是False来决定是否执行if语句中的代码.如果条件测试的值为 ...

  7. JQ封装图片预加载插件

    我们知道,图片的加载,特别是资源较大的图片,加载相当耗费时间.为了提高用户体验,不得不使用图片预加载技术来提前加载,以提高用户在浏览时的流畅度. 先来弄明白图片的懒加载和预加载的不同: 1)概念:懒加 ...

  8. 聊聊vue组件开发的“边界把握”和“状态驱动”

    vue有着完整的组件化开发机制,但是官网只给了开发的方式,对于开发规范以及组件化开发的最佳实践,还需要我们来摸索.本文就平时开发中的经验来谈谈“把握边界”和“状态驱动”这两个话题. 边界把握 边界把握 ...

  9. Bash提示符

    Bash有四种提示符 1.基本提示符(PS1):即$符号,是默认的基本提示符,当Shell运行在交互模式下时,该提示符会出现在屏幕上,可以设置为其它符号. 显示PS1设置[cb@cb:16:36:23 ...

  10. 移动webAPP前端开发技巧汇总2

    一.关于单位的使用 可能在传统的PC端来说,1px=1px的比例.而在移动端却不是这样,1px = ?. 因为出现了一个像素密度这样个东西,就不能在移动端使用“PX”这个单位.可能在你的大屏手机是1p ...