goodmuyis

Base64 Encode / Decode

Jul 1st, 2012
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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">&nbsp;
  211.       <input onclick="doDecode();" type=button value="Decode" name="decode">&nbsp;
  212.       <input type="checkbox" value="hex" name="opt" id="opt">Hex&nbsp;
  213.       </div>
  214.       <textarea id="dest" rows=11 cols=60 value="" name="dest"></textarea>
  215.     </div>
  216.     </div>
  217. </div>
  218. </BODY>
  219. </html>
Advertisement
Add Comment
Please, Sign In to add comment