小迪的Blog
学习ing...(注明:该Blog中的任何信息都非原创,只是作为个人的阅读笔记)
posts - 144,comments - 52,trackbacks - 0

/*
收藏的Base64编码/解码。
在一个外国网站看到的,不过对中文不支持。
自己加入了escape,unescape,对中文也支持了。
先用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>




引用自:
http://www2.cnblogs.com/vibration/articles/7392.html
posted on 2005-04-19 13:30  小迪  阅读(...)  评论(...编辑  收藏