跳过/寻求使用RC4加密定位

时间:2012-03-06 05:27:01

标签: java android video encryption rc4-cipher

当我想在流式传输加密视频时“跳过”某个位置时,我遇到了这个问题

所以我拥有的是:

一个http流服务器(本地,在Android设备上运行) 原生的Android媒体播放器 RC4加密实用程序

基本上,我在sdcard中存储加密视频,我想使用我的http流服务器将其传输到媒体播放器。服务器已经通过在将其写入OutputStream之前使用RC4加密实用程序转换字节来实时进行加密,这实际上是有效的。

加密文件没问题 - 只需针对加密实用程序的生成位运行整个文件 - 我在尝试播放视频时就做了。问题是当我想“寻找”视频中的位置时,例如我想查看2小时电影的中间部分。我目前正在做的事情,虽然非常缓慢,但是它可以重置RC4加密实用程序,将其提供的数量等于我在视频中跳转到的持续时间。

请原谅我,如果我在这里的解释中听起来不太清楚,但如果您实际上使用RC4加密流式传输,那么您应该遇到同样的问题。

所以问题是,它是否可能,如果是的话,我怎么能“寻找”我的RC4位发生器中的一个位置而不通过我刚刚跳过的所有不必要的字节?

每个视频的大小约为500mb左右,因此如果我寻求接近视频的末尾,那么在能够传输正确的数据之前,这将是大约500,000,000次无用的位迭代。

1 个答案:

答案 0 :(得分:5)

不,RC4 algorithm不可寻求。密钥流生成的每次迭代都涉及使用两个元素的有状态交换来置换密钥相关S排列,这种方式难以在不实际执行所有中间交换的情况下重现。

如果您曾经使用过,那么完成您想要的任务将是微不足道的。 AES CTR mode中的AES,因为点击率模式设计为​​完全可搜索的。

修改 但是,如果内存不稀缺,你可以做的一件事就是使用自己的RC4实现(参见链接,很容易做到),并定期缓存内部状态(每个位置总共258个字节)。如果用户来回跳跃,这将有所帮助,但是当用户第一次跳过时,必须生成完整的RC4密钥流。