当我想在流式传输加密视频时跳到某个位置时,我会遇到这个问题
所以我要说的是:
http流服务器(本地,在安卓设备上运行)原生安卓媒体播放器RC4加密实用程序
基本上,我在sdcard中存储了一个加密的视频,我想使用我的http流媒体服务器将其流式传输到媒体播放器。服务器已经在将字节写出到OutputStream之前,使用RC4加密实用程序转换字节,从而进行动态加密,这实际上是有效的。
加密文件是没有问题的-只需根据加密实用程序生成的位运行整个文件-这是我在尝试播放视频时所做的。问题是,当我想要“寻找”视频中的一个位置时,例如,我想看一部2小时的电影的中间部分。我目前正在做的事情,虽然速度很慢,但我正在做的是重置RC4加密实用程序,给它提供一个与我在视频中跳转到的持续时间相等的量。
如果我在这里的解释听起来不是很清楚,请原谅,但是如果你真的使用流的RC4加密,你应该会遇到同样的问题。
所以问题是,这是可能的吗?如果可能,我如何才能在RC4位生成器中“寻找”一个位置,而不通过我刚刚跳过的所有不必要的字节?
每个视频的大小约为500mb,所以如果我在视频的末尾附近寻找,那么在能够流式传输正确的数据之前,需要进行大约500000000次无用的比特迭代。
发布于 2012-03-06 16:21:34
不,RC4 algorithm是不可查找的。密钥流生成的每次迭代都涉及到使用两个元素的有状态交换来置换依赖于密钥的S置换,这种方式在不实际执行所有中间交换的情况下很难重现。
如果你已经在CTR mode中使用了AES,那么完成你想要的东西将是微不足道的,因为CTR模式被设计为完全可搜索的。
编辑:但是,如果内存不是很紧缺,你可以做的一件事是使用你自己的RC4实现(参见链接,这很容易做),并定期缓存内部状态(每个位置总共258字节)。如果用户来回跳跃很多,这将有所帮助,但用户第一次向前跳跃时,必须为该位置生成完整的RC4密钥流。
https://stackoverflow.com/questions/9578358
复制相似问题