如何使用Flash加密/解密FLV

时间:2011-10-14 20:27:23

标签: flash actionscript-3 encryption encoding flv

我正在开发一个Windows应用程序(在.NET中创建),其中一个功能是使用SWF组件播放本地FLV。

现在我需要创建一个加密应用程序来确保这些FLV无法自由播放,只有SWF播放器才能知道如何解密该文件(使用从.NET应用程序收到的密钥)。

我在考虑创建一个Air应用程序来编码我的flvs(可能是ByteArray类?),使用一些算法来根据键字符串对字符进行洗牌/不洗牌。

我的主要需求是如何使用Air / Flash对文件进行编码/解码。 我尝试了一些时间,只是尝试加载FLV,转换为ByteArray,然后保存新的FLV,但这个新的FLV将无法播放。打开Notepad ++,我注意到文件在它的FLV标题之前有几个字符。

任何人都知道如何正确地做到这一点?谢谢!

2 个答案:

答案 0 :(得分:3)

  

只有SWF播放器才知道如何解密该文件。

如果某人有权访问SWF,他们可以对其进行反编译,并了解如何解密您的FLV。

更好的方法是使用AES之类的方法加密它们,然后从服务器获取密钥。

如果您不担心人们对您的SWF进行反编译,请做任何会导致媒体播放器无法打开它的事情。

是的,您可以使用ByteArray修改您的FLV。

关于额外字节,您不应该“转换”为ByteArray,它应该在您收到时已采用该格式。听起来你在String中以某种方式使用它并使用writeUTF,它在开头写入长度。

答案 1 :(得分:2)

这是我通过我的经历和谷歌搜索获得的一个例子。效果很好。

    public function Main():void 
    {           
        us.load(new URLRequest("file.ext"))
        us.addEventListener(Event.COMPLETE, onVideoLoaded);
    } 

    private function onVideoLoaded(e:Event):void
    {
        var bytes:ByteArray = new ByteArray();  
        us.readBytes(bytes, bytes.length, us.bytesAvailable);

        bytes = encrypt(bytes);         
        saveFile(bytes);
    }

    private function saveFile(bytes:ByteArray):void
    {           
        var fileStream:FileStream = new FileStream();
        fileStream.open(File.desktopDirectory.resolvePath("filename.ext"), FileMode.WRITE);
        fileStream.writeBytes(bytes, 0, bytes.length);
        fileStream.close();

        fileStream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, onCompleteFile);
    }


    private function encrypt(bytes:ByteArray):ByteArray 
    {
        var i:int = bytes.length;
        while (i--)
        {
            bytes[i] += 128;
        }

        return bytes;
    }

使用ROT128加密文件,更多信息here