swf加密

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()));
        }
    }

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值