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; /** ...
随机推荐
- 本地修改js代码并时时生效的解决办法
js作为客户端语言(当然它也可以作服务端语言),非常强悍,一般情况下,我们都是在开发阶段不停的改,然后上线之后就作为稳定运行的代码. 然而有时候可能因为js写得有问题,导致上线后,某些功能无法使用,这 ...
- cpp(第五章)
1.副作用,指的是在计算表达式时对某些东西(如存储在变量的值)进行修改:顺序点,是程序执行过程中的一个点,在这里,进入下一步之前将确保对所有的副作用 都进行评估.(分号就是一个顺序点).for exa ...
- Mac 上所有的命令行相关问题的总结
1. java 系列命令 jdk,jar,war等等文件的执行方式 2. brew 系列命令 安装各种其他程序的命令例如:jenkins,MySQL,openssl brew list 列出所有的 ...
- 基于docker的 Hyperledger Fabric 多机环境搭建(上)
环境:ubuntu 16.04 Docker 17.04.0-ce go 1.7.4 consoul v0.8.0.4 ======================================= ...
- Spring学习(9)--- @Autowired注解(二)
可以使用@Autowired注解那些众所周知的解析依赖性接口,比如:BeanFactory,ApplicationContext,Environment,ResourceLoader,Applicat ...
- 《Python编程从入门到实践》_第五章_if语句
条件测试 每条if语句的核心都是一个值为Ture或False的表达式,这种表达式被称为为条件测试.Python根据条件测试的值为Ture还是False来决定是否执行if语句中的代码.如果条件测试的值为 ...
- JQ封装图片预加载插件
我们知道,图片的加载,特别是资源较大的图片,加载相当耗费时间.为了提高用户体验,不得不使用图片预加载技术来提前加载,以提高用户在浏览时的流畅度. 先来弄明白图片的懒加载和预加载的不同: 1)概念:懒加 ...
- 聊聊vue组件开发的“边界把握”和“状态驱动”
vue有着完整的组件化开发机制,但是官网只给了开发的方式,对于开发规范以及组件化开发的最佳实践,还需要我们来摸索.本文就平时开发中的经验来谈谈“把握边界”和“状态驱动”这两个话题. 边界把握 边界把握 ...
- Bash提示符
Bash有四种提示符 1.基本提示符(PS1):即$符号,是默认的基本提示符,当Shell运行在交互模式下时,该提示符会出现在屏幕上,可以设置为其它符号. 显示PS1设置[cb@cb:16:36:23 ...
- 移动webAPP前端开发技巧汇总2
一.关于单位的使用 可能在传统的PC端来说,1px=1px的比例.而在移动端却不是这样,1px = ?. 因为出现了一个像素密度这样个东西,就不能在移动端使用“PX”这个单位.可能在你的大屏手机是1p ...