⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utils.as

📁 实现很多功能 实现很多功能 实现很多功能
💻 AS
字号:
package com.justabc
{
	public class Utils
	{
    		static public function utf16to8(str:String):String {
			    var out:Array;
			    var i:Number, j:Number, len:Number, c:Number, c2:Number;
			    out = [];
			    len = str.length;
			    for (i = 0, j = 0; i < len; i++, j++) {
			        c = str.charCodeAt(i);
			        if (c <= 0x7f) {
			            out[j] = str.charAt(i);
			        }
			        else if (c <= 0x7ff) {
			            out[j] = String.fromCharCode(0xc0 | (c >>> 6),
			                                         0x80 | (c & 0x3f));
			        }
			        else if (c < 0xd800 || c > 0xdfff) {
			            out[j] = String.fromCharCode(0xe0 | (c >>> 12),
			                                         0x80 | ((c >>> 6) & 0x3f),
			                                         0x80 | (c & 0x3f));
			        }
			        else {
			            if (++i < len) {
			                c2 = str.charCodeAt(i);
			                if (c <= 0xdbff && 0xdc00 <= c2 && c2 <= 0xdfff) {
			                    c = ((c & 0x03ff) << 10 | (c2 & 0x03ff)) + 0x010000;
			                    if (0x010000 <= c && c <= 0x10ffff) {
			                        out[j] = String.fromCharCode(0xf0 | ((c >>> 18) & 0x3f),
			                                                     0x80 | ((c >>> 12) & 0x3f),
			                                                     0x80 | ((c >>> 6) & 0x3f),
			                                                     0x80 | (c & 0x3f));
			                    }
			                    else {
			                       out[j] = '?';
			                    }
			                }
			                else {
			                    i--;
			                    out[j] = '?';
			                }
			            }
			            else {
			                i--;
			                out[j] = '?';
			            }
			        }
			    }
			    return out.join('');
			}

			static public function utf8to16(str:String):String {
			    var out:Array, i:Number, j:Number, len:Number, c:Number, c2:Number, c3:Number, c4:Number, s:Number;
				
			    out = [];
			    len = str.length;
			    i = j = 0;
			    while (i < len) {
			        c = str.charCodeAt(i++);
			        switch (c >> 4) { 
			            case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
			            // 0xxx xxxx
			            out[j++] = str.charAt(i - 1);
			            break;
			            case 12: case 13:
			            // 110x xxxx   10xx xxxx
			            c2 = str.charCodeAt(i++);
			            out[j++] = String.fromCharCode(((c  & 0x1f) << 6) |
			                                            (c2 & 0x3f));
			            break;
			            case 14:
			            // 1110 xxxx  10xx xxxx  10xx xxxx
			            c2 = str.charCodeAt(i++);
			            c3 = str.charCodeAt(i++);
			            out[j++] = String.fromCharCode(((c  & 0x0f) << 12) |
			                                           ((c2 & 0x3f) <<  6) |
			                                            (c3 & 0x3f));
			            break;
			            case 15:
			            switch (c & 0xf) {
			                case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
			                // 1111 0xxx  10xx xxxx  10xx xxxx  10xx xxxx
			                c2 = str.charCodeAt(i++);
			                c3 = str.charCodeAt(i++);
			                c4 = str.charCodeAt(i++);
			                s = ((c  & 0x07) << 18) |
			                    ((c2 & 0x3f) << 12) |
			                    ((c3 & 0x3f) <<  6) |
			                     (c4 & 0x3f) - 0x10000;
			                if (0 <= s && s <= 0xfffff) {
			                    out[j] = String.fromCharCode(((s >>> 10) & 0x03ff) | 0xd800,
			                                                  (s         & 0x03ff) | 0xdc00);
			                }
			                else {
			                    out[j] = '?';
			                }
			                break;
			                case 8: case 9: case 10: case 11:
			                // 1111 10xx  10xx xxxx  10xx xxxx  10xx xxxx  10xx xxxx
			                i+=4;
			                out[j] = '?';
			                break;
			                case 12: case 13:
			                // 1111 110x  10xx xxxx  10xx xxxx  10xx xxxx  10xx xxxx  10xx xxxx
			                i+=5;
			                out[j] = '?';
			                break;
			            }
			        }
			        j++;
			    }
			    return out.join('');
			}
			
			
static private const base64EncodeChars: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", "+", "/"
];

static private const base64DecodeChars: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
];

static private function _base64Encode(str:String):String {
    var out:Array, i:Number, j:Number, len:Number;
    var c1:Number, c2:Number, c3:Number;

    len = str.length;
    i = j = 0;
    out = [];
    while (i < len) {
        c1 = str.charCodeAt(i++) & 0xff;
        if (i == len)
        {
            out[j++] = base64EncodeChars[c1 >> 2];
            out[j++] = base64EncodeChars[(c1 & 0x3) << 4];
            out[j++] = "==";
            break;
        }
        c2 = str.charCodeAt(i++) & 0xff;
        if (i == len)
        {
            out[j++] = base64EncodeChars[c1 >> 2];
            out[j++] = base64EncodeChars[((c1 & 0x03) << 4) | ((c2 & 0xf0) >> 4)];
            out[j++] = base64EncodeChars[(c2 & 0x0f) << 2];
            out[j++] = "=";
            break;
        }
        c3 = str.charCodeAt(i++) & 0xff;
        out[j++] = base64EncodeChars[c1 >> 2];
        out[j++] = base64EncodeChars[((c1 & 0x03) << 4) | ((c2 & 0xf0) >> 4)];
        out[j++] = base64EncodeChars[((c2 & 0x0f) << 2) | ((c3 & 0xc0) >> 6)];
        out[j++] = base64EncodeChars[c3 & 0x3f];
    }
    return out.join('');
}

static private function _base64Decode(str:String):String {
    var c1:Number, c2:Number, c3:Number, c4:Number;
    var i:Number, j:Number, len:Number, out:Array;

    len = str.length;
    i = j = 0;
    out = [];
    while (i < len) {
        /* c1 */
        do {
            c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
        } while (i < len && c1 == -1);
        if (c1 == -1) break;

        /* c2 */
        do {
            c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
        } while (i < len && c2 == -1);
        if (c2 == -1) break;

        out[j++] = String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));

        /* c3 */
        do {
            c3 = str.charCodeAt(i++) & 0xff;
            if (c3 == 61) return out.join('');
            c3 = base64DecodeChars[c3];
        } while (i < len && c3 == -1);
        if (c3 == -1) break;

        out[j++] = String.fromCharCode(((c2 & 0x0f) << 4) | ((c3 & 0x3c) >> 2));

        /* c4 */
        do {
            c4 = str.charCodeAt(i++) & 0xff;
            if (c4 == 61) return out.join('');
            c4 = base64DecodeChars[c4];
        } while (i < len && c4 == -1);
        if (c4 == -1) break;
        out[j++] = String.fromCharCode(((c3 & 0x03) << 6) | c4);
    }
    return out.join('');
}		 
		
static public function base64Encode(str:String):String {
	return _base64Encode(utf16to8(str));
}

static public function base64Decode(str:String):String {
	return utf8to16(_base64Decode(str));	
}		


/* xxtea.js
 *
 * Author:       Ma Bingyao <andot@ujn.edu.cn>
 * Copyright:    CoolCode.CN
 * Version:      1.4
 * LastModified: 2006-07-23
 * This library is free.  You can redistribute it and/or modify it.
 * http://www.coolcode.cn/?p=128
 */

static private function long2str(v:Array, w:Boolean):String {
    var vl:Number = v.length;
    var sl:Number = v[vl - 1] & 0xffffffff;
    for (var i:Number = 0; i < vl; i++)
    {
        v[i] = String.fromCharCode(v[i] & 0xff,
                                   v[i] >>> 8 & 0xff,
                                   v[i] >>> 16 & 0xff, 
                                   v[i] >>> 24 & 0xff);
    }
    if (w) {
        return v.join('').substring(0, sl);
    }
    else {
        return v.join('');
    }
}

static private function str2long(s:String, w:Boolean):Array {
    var len:Number = s.length;
    var v:Array = [];
    for (var i:Number = 0; i < len; i += 4)
    {
        v[i >> 2] = s.charCodeAt(i)
                  | s.charCodeAt(i + 1) << 8
                  | s.charCodeAt(i + 2) << 16
                  | s.charCodeAt(i + 3) << 24;
    }
    if (w) {
        v[v.length] = len;
    }
    return v;
}

static public function xxtea_encrypt(str:String, key:String):String {

    if(str.localeCompare("")==0)
    	return "";
    
    var v:Array = str2long(str, true);
    var k:Array = str2long(key, false);
    if (k.length < 4)
    {
        k.length = 4;
    }
    var n:Number = v.length - 1;

    var z:Number = v[n], y:Number = v[0], delta:Number = 0x9E3779B9;
    var mx:Number, e:Number, q:Number = Math.floor(6 + 52 / (n + 1)), sum:Number = 0;
    while (0 < q--) {
        sum = sum + delta & 0xffffffff;
        e = sum >>> 2 & 3;
        for (var p:Number = 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 & 0xffffffff;
        }
        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 & 0xffffffff;
    }

    return long2str(v, false);
}

static public function xxtea_decrypt(str:String, key:String):String {

    if(str.localeCompare("")==0)
    	return "";
    	
    var v:Array = str2long(str, false);
    var k:Array = str2long(key, false);
    if (k.length < 4)
    {
        k.length = 4;
    }
    var n:Number = v.length - 1;

    var z:Number = v[n - 1], y:Number = v[0], delta:Number = 0x9E3779B9;
    var mx:Number, e:Number, q:Number = Math.floor(6 + 52 / (n + 1)), sum:Number = q * delta & 0xffffffff;
    while (sum != 0) {
        e = sum >>> 2 & 3;
        for (var p:Number = 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 & 0xffffffff;
        }
        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 & 0xffffffff;
        sum = sum - delta & 0xffffffff;
    }

    return long2str(v, true);
}
		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -