分享一个JS的Base64加密解密功能

代码实现:


 

 1 var base64 = (function () {
 2     var encodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 3     var decodeChars = new Array(
 4                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
 5                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
 6                 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
 7                 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
 8                 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
 9                 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
10                 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
11                 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
12     //编码
13     function encode(str) {
14         var out, i, len;
15         var c1, c2, c3;
16         len = str.length;
17         i = 0;
18         out = "";
19         while (i < len) {
20             c1 = str.charCodeAt(i++) & 0xff;
21             if (i == len) {
22                 out += base64.encodeChars.charAt(c1 >> 2);
23                 out += base64.encodeChars.charAt((c1 & 0x3) << 4);
24                 out += "==";
25                 break;
26             }
27             c2 = str.charCodeAt(i++);
28             if (i == len) {
29                 out += base64.encodeChars.charAt(c1 >> 2);
30                 out += base64.encodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
31                 out += base64.encodeChars.charAt((c2 & 0xF) << 2);
32                 out += "=";
33                 break;
34             }
35             c3 = str.charCodeAt(i++);
36             out += base64.encodeChars.charAt(c1 >> 2);
37             out += base64.encodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
38             out += base64.encodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
39             out += base64.encodeChars.charAt(c3 & 0x3F);
40         }
41         return out;
42     };
43     //解码
44     function decode(str) {
45         var c1, c2, c3, c4;
46         var i, len, out;
47         len = str.length;
48         i = 0;
49         out = "";
50         while (i < len) {
51             /* c1 */
52             do {
53                 c1 = base64.decodeChars[str.charCodeAt(i++) & 0xff];
54             } while (i < len && c1 == -1);
55             if (c1 == -1)
56                 break;
57             /* c2 */
58             do {
59                 c2 = base64.decodeChars[str.charCodeAt(i++) & 0xff];
60             } while (i < len && c2 == -1);
61             if (c2 == -1)
62                 break;
63             out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
64             /* c3 */
65             do {
66                 c3 = str.charCodeAt(i++) & 0xff;
67                 if (c3 == 61)
68                     return out;
69                 c3 = base64.decodeChars[c3];
70             } while (i < len && c3 == -1);
71             if (c3 == -1)
72                 break;
73             out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
74             /* c4 */
75             do {
76                 c4 = str.charCodeAt(i++) & 0xff;
77                 if (c4 == 61)
78                     return out;
79                 c4 = base64.decodeChars[c4];
80             } while (i < len && c4 == -1);
81             if (c4 == -1)
82                 break;
83             out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
84         }
85         return out;
86     };
87     return {
88         encode: encode,
89         decode: decode
90     };
91 })();

 

posted @ 2017-08-03 17:22  风的幻想曲  阅读(245)  评论(0编辑  收藏  举报