在Adobe AIR中加密资产(视频文件)

时间:2010-04-14 08:23:10

标签: flex encryption video air

我正在尝试在Adobe AIR中创建视频播放器。我想加密视频文件,以便它们不会在播放器之外共享。我不想通过箍来创建一个坚如磐石的系统,但是简单的东西只能阻止90-95%的用户共享内容。

我在File Protection in Adobe AIR (Flex)

处经历了一个关于SO的相关问题

然而,由于视频文件大小肯定会超过10 MB,因此上述似乎不是解决方案。

有许多加密文本字符串的解决方案,但我没有找到任何加密文件。任何帮助或指示将不胜感激。

非常感谢。

更新:我们正试图通过以下方式实现这一目标:

  1. 加密/混淆视频文件的前50个二进制字符并存储在硬盘上。这使文件无法播放。
  2. 在运行时解密前50个字符以获取原始文件并将其复制到硬盘驱动器上的临时文件夹中。
  3. 退出时,删除解密的文件并清空临时文件夹。
  4. 这解决了我们的大部分问题。它不允许通过简单的复制和粘贴进行共享。是一个简单的解决方案,虽然可能不是很优雅。

    我们现在面临的问题是临时文件夹没有被清空。文件落在回收站中,可以很容易地从那里恢复!

4 个答案:

答案 0 :(得分:2)

我为DVD应用程序解决了这个问题,该应用程序加密了DVD中的所有资产,并在解密它的AIR应用程序中执行了HTTP服务器。

它以这种方式运作:

1 - 图像,视频或资产被加密并保存在任何地方,在我们的例子中是带有主密钥的DVD资源文件夹。

2 - Air应用程序包含一个非常简单的HTTP服务器,该服务器读取文件将其解密并使用简单的Flash视频播放器或使用<img src="localhost:5050/assetcode.jpg">等标签将其发送到同一个Air应用程序

空中应用程序中用于提供文件的代码如下:

import com.hurlant.crypto.prng.ARC4;
            import com.hurlant.util.Hex;
            import com.hurlant.crypto.Crypto;
            import com.hurlant.crypto.symmetric.ICipher;

            var key:ByteArray = Hex.toArray(Hex.fromString("masterkey"));
            var rc4:ARC4 = new ARC4(key);

            var fs:FileStream = new FileStream();
            fs.open( content, FileMode.READ );
            var ba:ByteArray = new ByteArray();


            fs.readBytes( ba, 0, fs.bytesAvailable );
            ba.position = 0;
            fs.close();



            rc4.decrypt(ba);
            //cipher.decrypt(ba);

            innerSendHTML(s, ext2mime[content.extension], ba );

            ba.length = 0;

我们使用RC4算法,因为它在我们的测试中更快。

对于HTTP Server,我们使用了Flash Camp 2010中的示例http应用程序,您可以在google中找到它。

此致

-

www.imaginacolombia.com

答案 1 :(得分:1)

您所描述的是“数字版权管理”,AIR确实支持此类内容,您可以在此处详细了解:

http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS5b3ccc516d4fbf351e63e3d118676a5be7-8000.html

DRM现在是一个棘手的问题,所以考虑你是否真的需要DRM或者你是否可以不使用DRM可能是值得的。

答案 2 :(得分:0)

使用PHP或其他一些脚本语言下载文件时,是否可以对文件进行身份验证?您可以强制SWF要求通过帖子或其他东西(未经测试)传递参数,大多数其他玩家都不会这样做..... /

然后,您可以使用http标头X-sendfile或类似的等效文件减少服务器上推送文件的服务器负载...

答案 3 :(得分:0)

你能做的是:

(1)读取文件的前1000个字节。
(2)将这1000个字节存储在加密的sqlite数据库或Encrypted LocalStore中。
(3)将1000个空字节写入文件的开头。

到目前为止,如果双击它,文件将无法打开。虽然大多数数据仍然存在,但大多数人都会放弃。

当您需要文件时:

(4)检索存储的1000个字节和
(5)将它们写回文件的开头。

完成后,重复步骤1-3。