我正在尝试在Adobe AIR中创建视频播放器。我想加密视频文件,以便它们不会在播放器之外共享。我不想通过箍来创建一个坚如磐石的系统,但是简单的东西只能阻止90-95%的用户共享内容。
我在File Protection in Adobe AIR (Flex)
处经历了一个关于SO的相关问题然而,由于视频文件大小肯定会超过10 MB,因此上述似乎不是解决方案。
有许多加密文本字符串的解决方案,但我没有找到任何加密文件。任何帮助或指示将不胜感激。
非常感谢。
更新:我们正试图通过以下方式实现这一目标:
这解决了我们的大部分问题。它不允许通过简单的复制和粘贴进行共享。是一个简单的解决方案,虽然可能不是很优雅。
我们现在面临的问题是临时文件夹没有被清空。文件落在回收站中,可以很容易地从那里恢复!
答案 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中找到它。
此致
-
答案 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。