as3.0 & JAVA & JS 64位编码与解码

64位编码  其是PHPRPC工程的一部分 PHPRPC 就是我们常用的RPC( Remote Procedure Calling ) 它非常安全高效:

下面是各个版本的代码:

 

AS3.0版

 

 

/**********************************************************/
|                                                          |
| The implementation of PHPRPC Protocol 3.0                |
|                                                          |
| Base64.as                                                |
|                                                          |
| Release 3.0.0                                            |
| Copyright (c) 2005-2007 by Team-PHPRPC                   |
|                                                          |
| WebSite:  http://www.phprpc.org/                         |
|           http://www.phprpc.net/                         |
|           http://www.phprpc.com/                         |
|           http://sourceforge.net/projects/php-rpc/       |
|                                                          |
| Authors:  Ma Bingyao <andot@ujn.edu.cn>                  |
|                                                          |
| This file may be distributed and/or modified under the   |
| terms of the GNU Lesser General Public License (LGPL)    |
| version 3.0 as published by the Free Software Foundation |
| and appearing in the included file LICENSE.              |
|                                                          |
/**********************************************************/
/* Base64 library for ActionScript 3.0.
 *
 * Copyright (C) 2007 Ma Bingyao <andot@ujn.edu.cn>
 * Version: 1.1
 * LastModified: Oct 26, 2007
 * This library is free.  You can redistribute it and/or modify it.
 */
/*
 * interfaces:
 * import org.phprpc.util.Base64;
 * import flash.utils.ByteArray;
 * var data:ByteArray = new ByteArray();
 * data.writeUTFBytes("Hello PHPRPC");
 * var b64:String = Base64.encode(data);
 * trace(b64);
 * trace(Base64.decode(b64));
 */
 /*
 
 用于64位编码:其作用是使信息高效安全的传输
 
 
 */

package org.phprpc.util{
 import flash.utils.ByteArray;
 public class Base64 {
  private static const encodeChars:Array=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'];
  private static const decodeChars:Array=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1];
  public static function encode(data:ByteArray):String {
   var out:Array=[];
   var i:int=0;
   var j:int=0;
   var r:int=data.length%3;
   var len:int=data.length-r;
   var c:int;
   while (i<len) {
    c=data[i++]<<16|data[i++]<<8|data[i++];
    out[j++]=encodeChars[c>>18]+encodeChars[c>>12&0x3f]+encodeChars[c>>6&0x3f]+encodeChars[c&0x3f];
   }
   if (r==1) {
    c=data[i++];
    out[j++]=encodeChars[c>>2]+encodeChars[c&0x03<<4]+"==";
   } else if (r==2) {
    c=data[i++]<<8|data[i++];
    out[j++]=encodeChars[c>>10]+encodeChars[c>>4&0x3f]+encodeChars[c&0x0f<<2]+"=";
   }
   return out.join('');
  }
  public static function decode(str:String):ByteArray {
   var c1:int;
   var c2:int;
   var c3:int;
   var c4:int;
   var i:int;
   var len:int;
   var out:ByteArray;
   len=str.length;
   i=0;
   out=new ByteArray  ;
   while (i<len) {
    // c1 
    do {
     c1=decodeChars[str.charCodeAt(i++)&0xff];
    } while (i<len&&c1==-1);
    if (c1==-1) {
     break;
    }
    // c2     
    do {
     c2=decodeChars[str.charCodeAt(i++)&0xff];
    } while (i<len&&c2==-1);
    if (c2==-1) {
     break;
    }
    out.writeByte(c1<<2|c2&0x30>>4);
    // c3 
    do {
     c3=str.charCodeAt(i++)&0xff;
     if (c3==61) {
      return out;
     }
     c3=decodeChars[c3];
    } while (i<len&&c3==-1);
    if (c3==-1) {
     break;
    }
    out.writeByte(c2&0x0f<<4|c3&0x3c>>2);
    // c4 
    do {
     c4=str.charCodeAt(i++)&0xff;
     if (c4==61) {
      return out;
     }
     c4=decodeChars[c4];
    } while (i<len&&c4==-1);
    if (c4==-1) {
     break;
    }
    out.writeByte(c3&0x03<<6|c4);
   }
   return out;
  }
 }
}

 

 

 

 

 

JS版本:

 

 

     

<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>

 

 

 

 

 

 

 

java 版本:

 

 

 

 

 

  1. /* Base64.java 
  2. * 
  3. * Author:       Ma Bingyao <andot@ujn.edu.cn> 
  4. * Copyright:    CoolCode.CN 
  5. * Version:      1.5 
  6. * LastModified: 2006-08-09 
  7. * This library is free.  You can redistribute it and/or modify it. 
  8. * http://www.coolcode.cn/?p=203 
  9. */  
  10. package org.phprpc.util;  
  11.    
  12. import java.lang.*;  
  13. import java.io.*;  
  14.    
  15. public class Base64 {  
  16.     private static char[] base64EncodeChars = new char[] {  
  17.         'A''B''C''D''E''F''G''H',  
  18.         'I''J''K''L''M''N''O''P',  
  19.         'Q''R''S''T''U''V''W''X',  
  20.         'Y''Z''a''b''c''d''e''f',  
  21.         'g''h''i''j''k''l''m''n',  
  22.         'o''p''q''r''s''t''u''v',  
  23.         'w''x''y''z''0''1''2''3',  
  24.         '4''5''6''7''8''9''+''/' };  
  25.    
  26.     private static byte[] base64DecodeChars = new byte[] {  
  27.     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  
  28.     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  
  29.     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -162, -1, -1, -163,  
  30.     52535455565758596061, -1, -1, -1, -1, -1, -1,  
  31.     -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  91011121314,  
  32.     1516171819202122232425, -1, -1, -1, -1, -1,  
  33.     -1262728293031323334353637383940,  
  34.     4142434445464748495051, -1, -1, -1, -1, -1 };  
  35.    
  36.     private Base64() {}  
  37.    
  38.     public static String encode(byte[] data) {  
  39.         StringBuffer sb = new StringBuffer();  
  40.         int len = data.length;  
  41.         int i = 0;  
  42.         int b1, b2, b3;  
  43.    
  44.         while (i < len) {  
  45.             b1 = data[i++] & 0xff;  
  46.             if (i == len) {  
  47.                 sb.append(base64EncodeChars[b1 >>> 2]);  
  48.                 sb.append(base64EncodeChars[(b1 & 0x3) << 4]);  
  49.                 sb.append("==");  
  50.                 break;  
  51.             }  
  52.             b2 = data[i++] & 0xff;  
  53.             if (i == len) {  
  54.                 sb.append(base64EncodeChars[b1 >>> 2]);  
  55.                 sb.append(  
  56.                         base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);  
  57.                 sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);  
  58.                 sb.append("=");  
  59.                 break;  
  60.             }  
  61.             b3 = data[i++] & 0xff;  
  62.             sb.append(base64EncodeChars[b1 >>> 2]);  
  63.             sb.append(  
  64.                     base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);  
  65.             sb.append(  
  66.                     base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);  
  67.             sb.append(base64EncodeChars[b3 & 0x3f]);  
  68.         }  
  69.         return sb.toString();  
  70.     }  
  71.    
  72.     public static byte[] decode(String str) {  
  73.         byte[] data = str.getBytes();  
  74.         int len = data.length;  
  75.         ByteArrayOutputStream buf = new ByteArrayOutputStream(len);  
  76.         int i = 0;  
  77.         int b1, b2, b3, b4;  
  78.    
  79.         while (i < len) {  
  80.    
  81.             /* b1 */  
  82.             do {  
  83.                 b1 = base64DecodeChars[data[i++]];  
  84.             } while (i < len && b1 == -1);  
  85.             if (b1 == -1) {  
  86.                 break;  
  87.             }  
  88.    
  89.             /* b2 */  
  90.             do {  
  91.                 b2 = base64DecodeChars[data[i++]];  
  92.             } while (i < len && b2 == -1);  
  93.             if (b2 == -1) {  
  94.                 break;  
  95.             }  
  96.             buf.write((int) ((b1 << 2) | ((b2 & 0x30) >>> 4)));  
  97.    
  98.             /* b3 */  
  99.             do {  
  100.                 b3 = data[i++];  
  101.                 if (b3 == 61) {  
  102.                     return buf.toByteArray();  
  103.                 }  
  104.                 b3 = base64DecodeChars[b3];  
  105.             } while (i < len && b3 == -1);  
  106.             if (b3 == -1) {  
  107.                 break;  
  108.             }  
  109.             buf.write((int) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));  
  110.    
  111.             /* b4 */  
  112.             do {  
  113.                 b4 = data[i++];  
  114.                 if (b4 == 61) {  
  115.                     return buf.toByteArray();  
  116.                 }  
  117.                 b4 = base64DecodeChars[b4];  
  118.             } while (i < len && b4 == -1);  
  119.             if (b4 == -1) {  
  120.                 break;  
  121.             }  
  122.             buf.write((int) (((b3 & 0x03) << 6) | b4));  
  123.         }  
  124.         return buf.toByteArray();  
  125.     }  
  126. }

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值