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; /** ...
随机推荐
- C++经典绘图工具EasyX
EasyX简介 EasyX 在学习C语言时,很多同学抱怨说C只能写最简单的Demo程序,通过printf在屏幕上打印字符来验证代码.这样的编程很枯燥,一点没觉得自己在设计软件. EasyX是针对C++ ...
- 基于android的语音识别
1.注册账户,添加应用 2.针对android平台的选择应用,下载SDK 3.将SDK的libs下文件拷贝到工程的libs目录下 4.添加用户权限 <uses-permission androi ...
- cron的用法
linux中的Cron命令是Linux的内置服务,用于定时的循环的服务. 1.启动.重启.关闭这个服务: /sbin/service crond start //启动服务 /sbin/service ...
- AngularJS高级程序设计读书笔记 -- 指令篇 之 自定义指令
2. 自定义指令(15-17 章) Module.directive(name, factory) 2.1 创建自定义指令的方法 Module.directive(name, factory) 示例 ...
- csvn install guide
一. make sure java install $ java -version $ echo $JAVA_HOME 二. untar tgz file $ tar xf CollabNetSubv ...
- R语言包翻译——翻译
Shiny-cheatsheet ...
- 大话Session
[原创]转载请保留出处:shoru.cnblogs.com 晋哥哥的私房钱 引言 在web开发中,session是个非常重要的概念.在许多动态网站的开发者看来,session就是一个变量,而且其表现像 ...
- 7.如何发布vue项目到服务器
1.确保程序是可运行的,即npm run dev可以运行 2.把index.js修改 3.运行npm命令npm run build 4.生成的dist文件为 直接点击index.html就能运行,部署 ...
- Oracle 使用命令导入dmp文件
若要导入到特定的表空间则需要新建表空间,若不要求,则用已有的,则只需执行下面的步骤 在dos窗口中输入imp 用户名/密码@ip地址:端口号/数据库实例 file='需要导入的dmp文件的路径' fu ...
- Linux的同步访问技术
1.中断屏蔽: 单CPU范围内避免竞态的一种简单方法:在进入临界区之前屏蔽系统的中断.中断屏蔽将使得中断与进程之间的并发不再发生,而且Linux内核的进程调度等操作都依赖中断来实现,内核抢占式进程之间 ...