📄 utils.as.svn-base
字号:
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 + -