base64编码

< 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> 
Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个“=”。
例:将对ABC进行BASE64编码
首先取ABC对应的ASCII码值。A(65)B(66)C(67)。
再取二进制值A(01000001)B(01000010)C(01000011),然后把这三个字节的二进制码接起来(010000010100001001000011),再以6位为单位分成4个数据块并在最高位填充两个0后形成4个字节的编码后的值(00010000)(00010100)(00001001)(00000011)。蓝色部分为真实数据。再把这四个字节数据转化成10进制数得(16)(20)(19)(3)。最后根据BASE64给出的64个基本字符表,查出对应的ASCII码字符(Q)(U)(J)(D)。这里的值实际就是数据在字符表中的索引。
注BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
二、解码规则
解码过程就是把4个字节再还原成3个字节再根据不同的数据形式把字节数组重新整理成数据。

你可能感兴趣的:(base64)