`
zxyskycn
  • 浏览: 51012 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类
最新评论

XXTEA for ActionScript 3.0 (数据加密)

阅读更多
/**********************************************************\  
|                                                          |  
| The implementation of PHPRPC Protocol 3.0                |  
|                                                          |  
| XXTEA.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.              |  
|                                                          |  
\**********************************************************/   
/* XXTEA encryption arithmetic library.  
 *  
 * Copyright (C) 2006-2007 Ma Bingyao <andot@ujn.edu.cn>  
 * Version: 1.7  
 * LastModified: Nov 5, 2007  
 * This library is free.  You can redistribute it and/or modify it.  
 */   
    
package org.phprpc.util {   
    import flash.utils.ByteArray;   
    import flash.utils.Endian;   
    public class XXTEA {   
        private static const delta:uint = uint(0x9E3779B9);   
        private static function LongArrayToByteArray(data:Array, includeLength:Boolean):ByteArray {   
            var length:uint = data.length;   
            var n:uint = (length - 1) << 2;   
            if (includeLength) {   
                var m:uint = data[length - 1];   
                if ((m < n - 3) || (m > n)) {   
                    return null;   
                }   
                n = m;   
            }   
            var result:ByteArray = new ByteArray();   
            result.endian = Endian.LITTLE_ENDIAN;   
            for (var i:uint = 0; i < length; i++) {   
                result.writeUnsignedInt(data[i]);   
            }   
            if (includeLength) {   
                result.length = n;   
                return result;   
            }   
            else {   
                return result;   
            }   
        }   
        private static function ByteArrayToLongArray(data:ByteArray, includeLength:Boolean):Array {   
            var length:uint = data.length;   
            var n:uint = length >> 2;   
            if (length % 4 > 0) {   
                n++;   
                data.length += (4 - (length % 4));   
            }   
            data.endian = Endian.LITTLE_ENDIAN;   
            data.position = 0;   
            var result:Array = [];   
            for (var i:uint = 0; i < n; i++) {   
                result[i] = data.readUnsignedInt();   
            }   
            if (includeLength) {   
                result[n] = length;   
            }   
            data.length = length;   
            return result;   
        }   
        public static function encrypt(data:ByteArray, key:ByteArray):ByteArray {   
            if (data.length == 0) {   
                return new ByteArray();   
            }   
            var v:Array = ByteArrayToLongArray(data, true);   
            var k:Array = ByteArrayToLongArray(key, false);   
            if (k.length < 4) {   
                k.length = 4;   
            }   
            var n:uint = v.length - 1;   
            var z:uint = v[n];   
            var y:uint = v[0];   
            var mx:uint;   
            var e:uint;   
            var p:uint;   
            var q:uint = uint(6 + 52 / (n + 1));   
            var sum:uint = 0;   
            while (0 < q--) {   
                sum = sum + delta;   
                e = sum >>> 2 & 3;   
                for (p = 0; p < n; p++) {   
                    y = v[p + 1];   
                    mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
                    z = v[p] = v[p] + mx;   
                }   
                y = v[0];   
                mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
                z = v[n] = v[n] + mx;   
            }   
            return LongArrayToByteArray(v, false);   
        }   
        public static function decrypt(data:ByteArray, key:ByteArray):ByteArray {   
            if (data.length == 0) {   
                return new ByteArray();   
            }   
            var v:Array = ByteArrayToLongArray(data, false);   
            var k:Array = ByteArrayToLongArray(key, false);   
            if (k.length < 4) {   
                k.length = 4;   
            }   
            var n:uint = v.length - 1;   
            var z:uint = v[n - 1];   
            var y:uint = v[0];   
            var mx:uint;   
            var e:uint;   
            var p:uint;   
            var q:uint = uint(6 + 52 / (n + 1));   
            var sum:uint = q * delta;   
            while (sum != 0) {   
                e = sum >>> 2 & 3;   
                for (p = n; p > 0; p--) {   
                    z = v[p - 1];   
                    mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
                    y = v[p] = v[p] - mx;   
                }   
                z = v[n];   
                mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
                y = v[0] = v[0] - mx;   
                sum = sum - delta;   
            }   
            return LongArrayToByteArray(v, true);   
        }   
    }   
}   

 

分享到:
评论

相关推荐

    xxtea/aes加密解密工具

    采用openssl1.1.0c,支持xxtea/aes加密解密,选择算法后输入秘钥及签名即可完成加密解密,即可加/解密单个文件,也可以指定加解密一个目录下的所有文件.

    aq-xxtea_decrypt-lua加密文件破解工具

    aq-xxtea_decrypt-lua加密文件破解工具,热门游戏开发脚本

    SQLite-XXTEA加密-源代码

    sqlite xxtea 加密 源代码 SQLite是一个很好用的嵌入式数据库。可惜美中不足的是SQLite的免费版本不具备加密功能。曾经在网上看到一个用WinCrypt实现加密功能的版本,但我不喜欢太依赖于Windows平台。这几日有时间...

    XXTEA加密算法的C代码实现

    “微型加密算法(TEA)及其相关变种(XTEA,Block TEA,XXTEA)都是分组加密算法,它们很容易被描述,实现也很简单(典型的几行代码)。 TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 ...

    xxtea-java, Java的XXTEA加密算法库.zip

    xxtea-java, Java的XXTEA加密算法库 用于 Java 的 XXTEA 简介XXTEA是一种快速安全的加密算法。 这是一个用于Java的XXTEA库。它与原始的XXTEA加密算法不同。 它加密和解密字节 [] 而不是 32bit 整数 array,键也

    XXTEA.rar_XXTEA_xxtea CSharp _xxtea c#_xxtea修改器_xxtea加密源码

    用于加密的XXTEA的源码,,很好用的。。。可以用多种方式进行操作。

    XXtea加密算法(C++)

    C++使用的XXtea加密算法,制造license,简单易用。能够完全使用,欢迎使用。。。。。。。。。。。。。。。。

    XXTEA加密算法源码

    TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据。TEA特点是速度快、效率高,实现也非常简单。由于针对TEA的攻击不断出现,所以TEA也发展出...

    SQLite-XXTEA加密-DLL

    sqlite xxtea 加密 调用 SQLite是一个很好用的嵌入式数据库。可惜美中不足的是SQLite的免费版本不具备加密功能。曾经在网上看到一个用WinCrypt实现加密功能的版本,但我不喜欢太依赖于Windows平台。这几日有时间,...

    XXTea 加密类 c#

    XXTea 加密类 c#

    XXTEA加密算法各种语言实现整理

    XXTEA加密算法各种语言实现整理,包括C# delphi java javascript php c actionscript ps

    XXTEA.zip_XXTEA_XXTEA加密算法_xxtea下载_xxtea加密工具

    一个很小巧的加密算法,加解密速度非常快,也很安全!!

    XXTEA加密使用代码

    XXTEA加密使用代码加密使用配合教程。

    Python的XXTEA加密算法库.zip

    Python的XXTEA加密算法库

    cocos2dx资源加密与压缩

    zip的读取解压,xxtea对资源的加密

    xxtea-php, PHP的XXTEA加密算法库.zip

    xxtea-php, PHP的XXTEA加密算法库 用于 PHP 的 XXTEA 简介XXTEA是一种快速安全的加密算法。 这是一个PHP的XXTEA库。它与原始的XXTEA加密算法不同。 它加密和解密字符串而不是 uint32 array,密钥也是字符串。安装

    xxtea-c, 基于XXTEA的加密算法库.zip

    xxtea-c, 基于XXTEA的加密算法库 用于C 的 XXTEA 简介XXTEA是一种快速安全的加密算法。 这是XXTEA的库。它与原始的XXTEA加密算法不同。 它对原始二进制数据进行加密和解密,而不是 32bit 整数 array,键也是原始二...

    xxtea-dart:XXTEA Dart加密算法库

    XXTEADart介绍XXTEA是一种快速且安全的加密算法。 这是Dart的XXTEA库。 它不同于原始的XXTEA加密算法。 它加密和解密String / Uint8List而不是uint32数组,并且密钥也是String / Uint8List。用法 import 'package:...

    xxtea加密方法

    xxtea的加解密方法源码,可以对字符串进行可逆的加密。C#的源代码

    python xxtea 网页页游加密工具带源码

    一个用python制作的xxtea对称加密解密的批处理图片资源工具,带源码。用于网页,页游资源图片资源加密处理

Global site tag (gtag.js) - Google Analytics