`
maloveqiao
  • 浏览: 102025 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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 版本:











    /* Base64.java
    *
    * Author:       Ma Bingyao <andot@ujn.edu.cn>
    * Copyright:    CoolCode.CN
    * Version:      1.5
    * LastModified: 2006-08-09
    * This library is free.  You can redistribute it and/or modify it.
    * http://www.coolcode.cn/?p=203
    */ 
    package org.phprpc.util; 
      
    import java.lang.*; 
    import java.io.*; 
      
    public class Base64 { 
        private static char[] base64EncodeChars = new char[] { 
            '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 byte[] base64DecodeChars = new byte[] { 
        -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 }; 
      
        private Base64() {} 
      
        public static String encode(byte[] data) { 
            StringBuffer sb = new StringBuffer(); 
            int len = data.length; 
            int i = 0; 
            int b1, b2, b3; 
      
            while (i < len) { 
                b1 = data[i++] & 0xff; 
                if (i == len) { 
                    sb.append(base64EncodeChars[b1 >>> 2]); 
                    sb.append(base64EncodeChars[(b1 & 0x3) << 4]); 
                    sb.append("=="); 
                    break; 
                } 
                b2 = data[i++] & 0xff; 
                if (i == len) { 
                    sb.append(base64EncodeChars[b1 >>> 2]); 
                    sb.append( 
                            base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]); 
                    sb.append(base64EncodeChars[(b2 & 0x0f) << 2]); 
                    sb.append("="); 
                    break; 
                } 
                b3 = data[i++] & 0xff; 
                sb.append(base64EncodeChars[b1 >>> 2]); 
                sb.append( 
                        base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]); 
                sb.append( 
                        base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]); 
                sb.append(base64EncodeChars[b3 & 0x3f]); 
            } 
            return sb.toString(); 
        } 
      
        public static byte[] decode(String str) { 
            byte[] data = str.getBytes(); 
            int len = data.length; 
            ByteArrayOutputStream buf = new ByteArrayOutputStream(len); 
            int i = 0; 
            int b1, b2, b3, b4; 
      
            while (i < len) { 
      
                /* b1 */ 
                do { 
                    b1 = base64DecodeChars[data[i++]]; 
                } while (i < len && b1 == -1); 
                if (b1 == -1) { 
                    break; 
                } 
      
                /* b2 */ 
                do { 
                    b2 = base64DecodeChars[data[i++]]; 
                } while (i < len && b2 == -1); 
                if (b2 == -1) { 
                    break; 
                } 
                buf.write((int) ((b1 << 2) | ((b2 & 0x30) >>> 4))); 
      
                /* b3 */ 
                do { 
                    b3 = data[i++]; 
                    if (b3 == 61) { 
                        return buf.toByteArray(); 
                    } 
                    b3 = base64DecodeChars[b3]; 
                } while (i < len && b3 == -1); 
                if (b3 == -1) { 
                    break; 
                } 
                buf.write((int) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2))); 
      
                /* b4 */ 
                do { 
                    b4 = data[i++]; 
                    if (b4 == 61) { 
                        return buf.toByteArray(); 
                    } 
                    b4 = base64DecodeChars[b4]; 
                } while (i < len && b4 == -1); 
                if (b4 == -1) { 
                    break; 
                } 
                buf.write((int) (((b3 & 0x03) << 6) | b4)); 
            } 
            return buf.toByteArray(); 
        } 
    }
分享到:
评论

相关推荐

    java和js相互base64编码解码

    在Java和JavaScript中,Base64编码和解码是两个重要的功能,用于处理这种编码格式。下面将详细阐述这两个编程语言中实现Base64编码和解码的方法。 首先,让我们关注Java。在Java 8及更高版本中,已经内置了`java....

    中国移动短信网关cmpp 3.0 华为java api

    2. **Java API**:华为的Java API封装了CMPP协议的各种操作,如连接管理、消息编码与解码、事务处理等,为开发者提供了一套完整的接口。这些接口通常包括建立连接、发送短信、接收短信、断开连接等方法,使得开发者...

    tlv的java编码和解码

    本文将详细讲解如何在Java环境中实现TLV的编码与解码,并结合提供的`ber-tlv`资源进行分析。 TLV结构简单明了,由三个部分组成: 1. **Tag**:标识数据的类型或者含义,通常是一个整数。 2. **Length**:表示Value...

    js解码 、java编码

    在IT行业中,编码和解码是数据处理的重要环节,特别是在JavaScript和Java这两种广泛使用的编程语言中。本文将深入探讨“js解码”和“java编码”这两个主题,并结合标签“源码”和“工具”,讨论如何在实际项目中应用...

    as3.0 XML加载

    在ActionScript 3.0(AS3.0)中,XML加载是一个重要的功能,它允许开发者从服务器获取XML数据并在Flash应用程序中使用这些数据。XML因其结构化和易读性,常被用作数据交换格式,尤其适用于轻量级的Web服务。本篇文章...

    基于华为smproxy中国移动CMPP3.0网关java源代码

    **基于华为SMProxy中国移动CMPP3.0网关Java源代码详解** 在移动通信领域,短消息服务(Short Message Service, SMS)是重要的信息传递手段。为了满足大规模短信业务的需求,中国移动推出了CMPP(China Mobile ...

    SMGP 3.0 Java源代码

    Java实现中,通常会有一个专门的类或方法来处理TLV的解析和构建,确保正确地编码和解码这些字段。这涉及到类型转换、内存管理以及错误处理等方面的知识。 **长短信封装** 在SMGP中,由于单条短信的字符限制,有时...

    Java基于Base64实现编码解码图片文件

    "Java基于Base64实现编码解码图片文件" Java基于Base64实现编码解码图片文件是Java语言中的一种常见的编码解码实现方式。Base64是一种常用的字符编码,在很多地方都会用到,但它并不是安全领域下的加密解密算法,...

    json数据base64编码压缩+解压解码(java以及js)

    java端:返回类型非字符接口调用StringUtils#base64AndCompressJson进行编码压缩 ,返回类型为字符接口调用StringUtils#base64Andcompress js 端:引入压缩包中的js文件 ,调用deBase64AndUncompress进行解压解码

    简单的用as3.0播放声音文件的例子

    总之,使用AS3.0播放声音文件涉及多个步骤,包括加载、解码、创建 `Sound` 对象、播放和控制声音。理解这些概念和方法是创建交互式音频体验的基础。记住,良好的编程实践,如适当的事件处理和资源管理,对于创建流畅...

    fmod.dll-v3.6.3.0&v3.7.3.0

    - **音频格式支持**:FMOD支持多种音频格式,包括MP3、WAV、Vorbis、MOD、MIDI等,无需额外的解码库,大大简化了音频资源的集成。 - **动态音频处理**:FMOD提供了实时混音、淡入淡出、音量控制、3D空间化等高级...

    Base64 编码解码 Java

    Base64 编码解码 Java ,Java对字符串Base64 编码解码的方法!!

    Base64编码和解码java版本

    在Java中,Base64编码和解码的功能主要通过`java.util.Base64`这个类来实现,该类在Java 8及以上版本中引入。下面将详细介绍如何使用这个类进行Base64的编码和解码操作。 首先,我们来看Base64编码的过程。编码的...

    霍夫曼编码与解码的Java实现

    huffman的java实现 码表生成程序 可对任意“.txt”文件进行概率统计,显示字符及其概率对照表; 依概率编制Huffman码表,显示字符、对应概率及码字对照表。 编码程序 使用码表,对任意“.txt”进行Huffman编码; ...

    java使用Hex编码解码实现Aes加密解密功能示例

    在本文示例中,我们关注的是如何利用Java的Hex编码和解码来处理AES加密和解密的过程。 首先,让我们了解什么是Hex编码。Hex编码是一种将二进制数据转换为可打印字符的表示方式,每个字节被转换为两个十六进制数字...

    java实现BASE64编码和解码程序

    实现BASE64编码和解码程序, 在类中实现如下函数并运行测试正确。 BASE64编码算法请在网上查询。 public String encode(byte[] data) { } public byte[] decode(String b) { }

    JS端与java(android)端3DES加密解密和Base64编码解码文件

    本文将深入探讨如何在JavaScript(JS)客户端和Java(Android)端实现3DES加密解密以及Base64编码解码,这对于保护用户敏感信息和实现安全通信至关重要。 首先,3DES(Triple Data Encryption Standard)是一种加强...

    as3.0组件详细使用与开发教程

    内容中还涉及到版权与许可的细节,包括版权声明、最终用户协议、以及如何在法律许可的范围内使用文档和软件。 文档印刷惯例部分详细描述了本手册的格式和编排方式,包括章节编号、页码、图示和表格的使用等,以便...

    java实现CMPP3.0源代码

    4. **数据编码与解码**:CMPP协议中的数据字段有特定的编码要求,如短信内容通常需要使用7位或8位的GSM 7bit编码。开发者需要熟悉这些编码规则,并在编码和解码过程中避免乱码问题。 5. **异常处理**:在与短信网关...

    AS3.0开发MMORPG游戏概要.pdf

    以上知识点概括了使用AS3.0开发MMORPG游戏的关键技术和实践,包括网络编程、数据编码解码、模块化设计、事件处理、资源管理等方面。这些内容对于理解AS3.0在现代游戏开发中的应用非常有价值。由于文档内容部分是经过...

Global site tag (gtag.js) - Google Analytics