byteArray二进制加密,此种方法不会使swf变大,只是在原有的字节流中做混淆,对闪客精灵等软件可以起到很好的防破解作用。网上又有源码可以很好地做研究。参考 加密类 http://www.fireyang.com/blog/?p=582
package util
{
import com.hurlant.crypto.symmetric.AESKey;
import flash.utils.ByteArray;
/**
* @author 黄记新, 下午4:02:25
*/
public class EncryptUtil
{
public function EncryptUtil()
{
}
//加密函数
public static function compress(byte:ByteArray,password:String):ByteArray{
var key:String = password; //得到密文
var binKey:ByteArray = new ByteArray();
binKey.writeUTF(key); //AESKey requires binary key
var aes:AESKey = new AESKey(binKey);
var bytesToEncrypt:int = (byte.length & ~15);//注意:byte.length&~15。这是为了确保被加密的字节数刚好可以被16整除否则我们将不能调用aes.encrypt().
//make sure that it can be divided by 16, zero the last 4 bytes
for (var i:int = 0; i < bytesToEncrypt; i += 16){
aes.encrypt(byte, i);
}
return byte;
}
//解密函数
public static function uncompress(byte:ByteArray,password:String):ByteArray{
var key:String = password; //得到密文
var binKey:ByteArray = new ByteArray();
binKey.writeUTF(key); //AES 算法需要二进制
var aes:AESKey = new AESKey(binKey);
var bytesToDecrypt:int = (byte.length & ~15); //注意:byte.length&~15。这是为了确保被加密的字节数刚好可以被16整除否则我们将不能调用aes.encrypt().
for (var i:int = 0; i < bytesToDecrypt; i += 16){
aes.decrypt(byte, i);
}
return byte;
}
}
}
容器重新解密示例:
package
{
import com.hurlant.crypto.symmetric.AESKey;
import flash.display.Loader;
import flash.display.Sprite;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
import flash.utils.ByteArray;
[SWF (width = 640, height = 423)] //the dimensions should be same as the loaded swf's
public class Main extends Sprite
{
[Embed (source = "VerletClothEn.swf", mimeType = "application/octet-stream")]
// source = path to the swf you want to protect
private var content:Class;
private var key:String = "activetuts";
public function Main():void
{
var data:ByteArray = new content();
var binKey:ByteArray = new ByteArray();
binKey.writeUTF(key); //AESKey requires binary key
var aes:AESKey = new AESKey(binKey);
var bytesToDecrypt:int = (data.length & ~15); //make sure that it can be divided by 16, zero the last 4 bytes
for (var i:int = 0; i < bytesToDecrypt; i += 16)
aes.decrypt(data, i);
var loader:Loader = new Loader();
addChild(loader);
loader.loadBytes(data, new LoaderContext(false, new ApplicationDomain()));
}
}
}