JavaScript实现的encode64加密算法实例分析

 这段JavaScript代码可实现encode64加密算法,速度还是相当不错的。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

//encode64编解码
(function() {
var codeChar = "PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh";
window.encode64 = function(str) {
var s = "";
var a = strToBytes(str);
//取得字串的字节数组, 数组长度是字串长度的2倍.
var res = a.length % 3;
//3个字节一组进行处理, 余下特殊处理
var i = 2, v;
for (; i < a.length; i += 3) {
//每3个字节用4个字符表示,
//相当于3个字符(实际上是6个字节)用8个字符编码(实际为16个字节)
//看起来容量膨胀了很多, 但是在启用压缩的情况下, 这些又被抵消掉了
v = a[i - 2] + (a[i - 1] << 8) + (a[i] << 16);
s += codeChar.charAt(v & 0x3f);
s += codeChar.charAt((v >> 6) & 0x3f);
s += codeChar.charAt((v >> 12) & 0x3f);
s += codeChar.charAt((v >> 18));
}
if (res == 1) {//字节余一位时候, 补2个字符, 64*64>256
v = a[i - 2];
s += codeChar.charAt(v & 0x3f);
s += codeChar.charAt((v >> 6) & 0x3f);
} else if (res == 2) {
//字节余2位的时候, 补3个字节, 64*64*64>256*256, 所以是可行的
v = a[i - 2] + (a[i - 1] << 8);
s += codeChar.charAt(v & 0x3f);
s += codeChar.charAt((v >> 6) & 0x3f);
s += codeChar.charAt((v >> 12) & 0x3f);
}
return s;
};
window.decode64 = function(codeStr) {
var dic = [];
for (var i = 0; i < codeChar.length; i++) {
dic[codeChar.charAt(i)] = i;
}
var code = [];
var res = codeStr.length % 4;
var i = 3, v;
for (; i < codeStr.length; i += 4) {
v = dic[codeStr.charAt(i - 3)];
v += dic[codeStr.charAt(i - 2)] << 6;
v += dic[codeStr.charAt(i - 1)] << 12;
v += dic[codeStr.charAt(i)] << 18;
code.push(v & 0xff, (v >> 8) & 0xff, (v >> 16) & 0xff);
}
if (res == 2) {
//正确的字节数肯定是余2或3, 没有1的情况, 如果出现, 舍弃.
v = dic[codeStr.charAt(i - 3)];
v += dic[codeStr.charAt(i - 2)] << 6;
code.push(v & 0xff);
} else if (res == 3) {
v = dic[codeStr.charAt(i - 3)];
v += dic[codeStr.charAt(i - 2)] << 6;
v += dic[codeStr.charAt(i - 1)] << 12;
code.push(v & 0xff, (v >> 8) & 0xff);
}
return strFromBytes(code);
};
})();

时间: 2024-09-27 16:10:34

JavaScript实现的encode64加密算法实例分析的相关文章

JavaScript实现的encode64加密算法实例分析_javascript技巧

本文实例讲述了JavaScript实现的encode64加密算法.分享给大家供大家参考.具体如下: 这段JavaScript代码可实现encode64加密算法,速度还是相当不错的. //encode64编解码 (function() { var codeChar = "PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh"; window.encode64 = function(str) { var s = &

javascript原始值和对象引用实例分析

javascript原始值和对象引用实例分析         这篇文章主要介绍了javascript原始值和对象引用的方法,实例分析了javascript原始值和对象引用的功能.定义与相关技巧,需要的朋友可以参考下 本文实例讲述了javascript原始值和对象引用的方法.分享给大家供大家参考.具体分析如下: 一句话来说:原始值是不可变的,而对象引用是可变的. js中的原始值(undefined.null.布尔值.数字和字符串)与对象(包括数组和函数)有着本质的区别.原始值是不可更改的,任何方法

JavaScript自定义等待wait函数实例分析

 这篇文章主要介绍了JavaScript自定义等待wait函数,实例分析了自定义等待函数的实现与使用技巧,需要的朋友可以参考下     本文实例讲述了JavaScript自定义等待wait函数用法.分享给大家供大家参考.具体分析如下: 下面是一个js自定义的wait函数,可以暂停程序的执行 ? 1 2 3 4 5 6 7 8 function sleep(delay) { var start = new Date().getTime(); while (new Date().getTime()

JavaScript进阶练习及简单实例分析_javascript技巧

当用户点击"统计"按钮时,在窗口中弹出文本框中出现次数最多的字符并显示其出现的次数 点击统计按钮时效果如图所示: 实现代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo

Android编程之MD5加密算法实例分析_Android

本文实例分析了Android编程之MD5加密算法.分享给大家供大家参考,具体如下: Android MD5加密算与J2SE平台一模一样,因为Android 平台支持 java.security.MessageDigest这个包.实际上与J2SE平台一模一样. 算法签名: 复制代码 代码如下: String getMD5(String val) throws NoSuchAlgorithmException 输入一个String(需要加密的文本),得到一个加密输出String(加密后的文本) pa

javascript中键盘事件用法实例分析_javascript技巧

本文实例分析了javascript中键盘事件用法.分享给大家供大家参考.具体如下: 键盘事件包含onkeydown.onkeypress和onkeyup这三个事件 事件初始化 function keyDown(){} document.onkeydown = keyDown; //论按下键盘上的哪个键,都将调用KeyDown()函数. DOM标准下 function keyDown(e) { var keycode = e.which; //取得对应的键值(数字) var realkey = S

javascript面向对象之定义成员方法实例分析_javascript技巧

本文实例分析了javascript面向对象之定义成员方法.分享给大家供大家参考.具体如下: javascript面向对象,定义成员方法如下所示: 复制代码 代码如下: <script language="javascript" type="text/javascript"> function Person(name,age){  this.name = name;  this.age = age;  this.show = function(){   d

javascript中sort()的用法实例分析_javascript技巧

本文实例分析了javascript中sort()的用法.分享给大家供大家参考.具体分析如下: 函数的语法: arrayObject.sort(sortby) you think this is not the right way but you love it  这里还用到了split函数,目的是去到一个字符串的数组,比较常用.然后通过数组的排序函数sort()对数组内的值进行排序,得到新的数组,然后通过循环输出数组的内容就得到了排序后的字符串. 在例子中,默认情况下,它会按照ascii码来进行

JavaScript文档碎片操作实例分析_javascript技巧

本文实例分析了JavaScript文档碎片操作方法.分享给大家供大家参考,具体如下: 使用文档碎片在某些情况下可以提高页面效率. javascript操作dom是一个很耗性能的过程,在某些情况下,不得不进行dom循环操作,我们每次对dom的操作都会触发"重排",这严重影响到能耗,一般通常采取的做法是尽可能的减少dom操作来减少"重排". 面对循环操作dom的过程,我们选择使用文档碎片(creatDocumentFragment),将需要添加到dom中的内容一次性添加