码迷,mamicode.com
首页 > 编程语言 > 详细

转: Javascript Base64编码与解码

时间:2015-09-18 12:14:31      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

       Javascript Base64编码与解码                        

       分类:            JavaScript            2015-02-04 14:25    212人阅读    评论(0)    收藏    举报    

转自:http://blog.csdn.net/yanzhibo/article/details/20079943

[javascript] view plaincopy技术分享技术分享

  1. <html>  

  2. <head>  

  3. <META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">  

  4. <meta http-equiv="Content-Type" content="text/html; charset=unicode">  

  5. <script language="JavaScript" type="text/javascript" src="../var.js"></script>  

  6. <title>Base64 Encode and Decode</title>  

  7. <style>  

  8. </style>  

  9. <script type="text/javascript" language="javascript">  

  10. var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";  

  11. var base64DecodeChars = new Array(  

  12.     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  

  13.     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  

  14.     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,  

  15.     52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,  

  16.     -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,  

  17.     15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,  

  18.     -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,  

  19.     41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);  

  20.   

  21. function base64encode(str) {  

  22.     var out, i, len;  

  23.     var c1, c2, c3;  

  24.   

  25.     len = str.length;  

  26.     i = 0;  

  27.     out = "";  

  28.     while(i < len) {  

  29.     c1 = str.charCodeAt(i++) & 0xff;  

  30.     if(i == len)  

  31.     {  

  32.         out += base64EncodeChars.charAt(c1 >> 2);  

  33.         out += base64EncodeChars.charAt((c1 & 0x3) << 4);  

  34.         out += "==";  

  35.         break;  

  36.     }  

  37.     c2 = str.charCodeAt(i++);  

  38.     if(i == len)  

  39.     {  

  40.         out += base64EncodeChars.charAt(c1 >> 2);  

  41.         out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));  

  42.         out += base64EncodeChars.charAt((c2 & 0xF) << 2);  

  43.         out += "=";  

  44.         break;  

  45.     }  

  46.     c3 = str.charCodeAt(i++);  

  47.     out += base64EncodeChars.charAt(c1 >> 2);  

  48.     out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));  

  49.     out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));  

  50.     out += base64EncodeChars.charAt(c3 & 0x3F);  

  51.     }  

  52.     return out;  

  53. }  

  54.   

  55. function base64decode(str) {  

  56.     var c1, c2, c3, c4;  

  57.     var i, len, out;  

  58.   

  59.     len = str.length;  

  60.     i = 0;  

  61.     out = "";  

  62.     while(i < len) {  

  63.     /* c1 */  

  64.     do {  

  65.         c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];  

  66.     } while(i < len && c1 == -1);  

  67.     if(c1 == -1)  

  68.         break;  

  69.   

  70.     /* c2 */  

  71.     do {  

  72.         c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];  

  73.     } while(i < len && c2 == -1);  

  74.     if(c2 == -1)  

  75.         break;  

  76.   

  77.     out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));  

  78.   

  79.     /* c3 */  

  80.     do {  

  81.         c3 = str.charCodeAt(i++) & 0xff;  

  82.         if(c3 == 61)  

  83.         return out;  

  84.         c3 = base64DecodeChars[c3];  

  85.     } while(i < len && c3 == -1);  

  86.     if(c3 == -1)  

  87.         break;  

  88.   

  89.     out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));  

  90.   

  91.     /* c4 */  

  92.     do {  

  93.         c4 = str.charCodeAt(i++) & 0xff;  

  94.         if(c4 == 61)  

  95.         return out;  

  96.         c4 = base64DecodeChars[c4];  

  97.     } while(i < len && c4 == -1);  

  98.     if(c4 == -1)  

  99.         break;  

  100.     out += String.fromCharCode(((c3 & 0x03) << 6) | c4);  

  101.     }  

  102.     return out;  

  103. }  

  104.   

  105. function utf16to8(str) {  

  106.     var out, i, len, c;  

  107.   

  108.     out = "";  

  109.     len = str.length;  

  110.     for(i = 0; i < len; i++) {  

  111.     c = str.charCodeAt(i);  

  112.     if ((c >= 0x0001) && (c <= 0x007F)) {  

  113.         out += str.charAt(i);  

  114.     } else if (c > 0x07FF) {  

  115.         out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));  

  116.         out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));  

  117.         out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));  

  118.     } else {  

  119.         out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));  

  120.         out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));  

  121.     }  

  122.     }  

  123.     return out;  

  124. }  

  125.   

  126. function utf8to16(str) {  

  127.     var out, i, len, c;  

  128.     var char2, char3;  

  129.   

  130.     out = "";  

  131.     len = str.length;  

  132.     i = 0;  

  133.     while(i < len) {  

  134.     c = str.charCodeAt(i++);  

  135.     switch(c >> 4)  

  136.     {   

  137.       case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:  

  138.         // 0xxxxxxx  

  139.         out += str.charAt(i-1);  

  140.         break;  

  141.       case 12: case 13:  

  142.         // 110x xxxx   10xx xxxx  

  143.         char2 = str.charCodeAt(i++);  

  144.         out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));  

  145.         break;  

  146.       case 14:  

  147.         // 1110 xxxx  10xx xxxx  10xx xxxx  

  148.         char2 = str.charCodeAt(i++);  

  149.         char3 = str.charCodeAt(i++);  

  150.         out += String.fromCharCode(((c & 0x0F) << 12) |  

  151.                        ((char2 & 0x3F) << 6) |  

  152.                        ((char3 & 0x3F) << 0));  

  153.         break;  

  154.     }  

  155.     }  

  156.   

  157.     return out;  

  158. }  

  159.   

  160. function CharToHex(str) {  

  161.     var out, i, len, c, h;  

  162.   

  163.     out = "";  

  164.     len = str.length;  

  165.     i = 0;  

  166.     while(i < len)   

  167.     {  

  168.         c = str.charCodeAt(i++);  

  169.         h = c.toString(16);  

  170.         if(h.length < 2)  

  171.             h = "0" + h;  

  172.           

  173.         out += "\\x" + h + " ";  

  174.         if(i > 0 && i % 8 == 0)  

  175.             out += "\r\n";  

  176.     }  

  177.   

  178.     return out;  

  179. }  

  180.   

  181. function doEncode() {  

  182.     var src = document.getElementById(‘src‘).value;  

  183.     document.getElementById(‘dest‘).value = base64encode(utf16to8(src));  

  184. }  

  185.   

  186. function doDecode() {  

  187.     var src = document.getElementById(‘src‘).value;  

  188.     var opts = document.getElementById(‘opt‘);  

  189.   

  190.     if(opts.checked)  

  191.     {  

  192.         document.getElementById(‘dest‘).value = CharToHex(base64decode(src));  

  193.     }  

  194.     else  

  195.     {  

  196.         document.getElementById(‘dest‘).value = utf8to16(base64decode(src));  

  197.     }  

  198. }  

  199.   

  200. </script>  

  201. </head>  

  202.   

  203. <BODY bgcolor="#EAF0F8" topmargin="10" leftmargin="10" rightmargin="10" bottommargin="10">  

  204. <div id="contain" style="font-family: Tahoma, Arial; font-size:11pt">  

  205.   <div id="mainbg">  

  206.     <div style="color: #000080; margin-bottom: 10"><b>Base64 Encode / Decode</b></div>  

  207.     <div>  

  208.       <textarea id="src" rows=11 cols=60 value="" name="src"></textarea>  

  209.       <div style="margin: 10 0 10 0">  

  210.       <input onclick="doEncode();" type=button value="Encode" name="encode">   

  211.       <input onclick="doDecode();" type=button value="Decode" name="decode">   

  212.       <input type="checkbox" value="hex" name="opt" id="opt">Hex   

  213.       </div>  

  214.       <textarea id="dest" rows=11 cols=60 value="" name="dest"></textarea>  

  215.     </div>  

  216.     </div>  

  217. </div>  

  218. </BODY>  

  219. </html> 


转: Javascript Base64编码与解码

标签:

原文地址:http://my.oschina.net/mellen/blog/508015

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!