网站导航: 首页 >> 网络学堂 > 网络编程 > 正文

base64编码/解码

2005-12-7 9:52:56   点击:   作者:选择自 wanghr100 的 Blog
推荐给好友】 【字体: 】 【打印】 【关闭

编者:解决了对中文的不支持问题.  
先用escape()对中文进行编码.然后再进行base64编码.  
解码时,再加入unescape()对中文进行解码.  

<html>  
   <head>  
      <title>base64 Encoding/Decoding</title>  
   </head>  

   <script type="text/javascript"><!--  

   var keyStr = "ABCDEFGHIJKLMNOP" +  
                "QRSTUVWXYZabcdef" +  
                "ghijklmnopqrstuv" +  
                "wxyz0123456789+/" +  
                "=";  

   function encode64(input) {  
      input = escape(input);  
      var output = "";  
      var chr1, chr2, chr3 = "";  
      var enc1, enc2, enc3, enc4 = "";  
      var i = 0;  

      do {  
         chr1 = input.charCodeAt(i++);  
         chr2 = input.charCodeAt(i++);  
         chr3 = input.charCodeAt(i++);  

         enc1 = chr1 >> 2;  
         enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);  
         enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);  
         enc4 = chr3 & 63;  

         if (isNaN(chr2)) {  
            enc3 = enc4 = 64;  
         } else if (isNaN(chr3)) {  
            enc4 = 64;  
         }  

         output = output +   
            keyStr.charAt(enc1) +   
            keyStr.charAt(enc2) +   
            keyStr.charAt(enc3) +   
            keyStr.charAt(enc4);  
         chr1 = chr2 = chr3 = "";  
         enc1 = enc2 = enc3 = enc4 = "";  
      } while (i < input.length);  

      return output;  
   }  

   function decode64(input) {  
      var output = "";  
      var chr1, chr2, chr3 = "";  
      var enc1, enc2, enc3, enc4 = "";  
      var i = 0;  

      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =  
      var base64test = /[^A-Za-z0-9\+\/\=]/g;  
      if (base64test.exec(input)) {  
         alert("There were invalid base64 characters in the input text.\n" +  
               "Valid base64 characters are A-Z, a-z, 0-9, ’+’, ’/’, and ’=’\n" +  
               "Expect errors in decoding.");  
      }  
      input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");  

      do {  
         enc1 = keyStr.indexOf(input.charAt(i++));  
         enc2 = keyStr.indexOf(input.charAt(i++));  
         enc3 = keyStr.indexOf(input.charAt(i++));  
         enc4 = keyStr.indexOf(input.charAt(i++));  

         chr1 = (enc1 << 2) | (enc2 >> 4);  
         chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);  
         chr3 = ((enc3 & 3) << 6) | enc4;  

         output = output + String.fromCharCode(chr1);  

         if (enc3 != 64) {  
            output = output + String.fromCharCode(chr2);  
         }  
         if (enc4 != 64) {  
            output = output + String.fromCharCode(chr3);  
         }  

         chr1 = chr2 = chr3 = "";  
         enc1 = enc2 = enc3 = enc4 = "";  

      } while (i < input.length);  

      return unescape(output);  
   }  

   //--></script>  

   <body>  

      <form name="base64Form">  

         Type in the message you want to encode in base64, or paste<br>  
         base64 encoded text into the text field, select Encode or Decode, <br>  
         and click the button!<br>  

         <textarea name="theText" cols="40" rows="6"></textarea><br>  

         <input type="button" name="encode" value="Encode to base64"  
            onClick="document.base64Form.theText.value=encode64(document.base64Form.theText.value);">  
         <input type="button" name="decode" value="Decode from base64"   
            onClick="document.base64Form.theText.value=decode64(document.base64Form.theText.value);">  

      </form>  

   </body>  
</html> 
来源:



 相关内容