3

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

所以我所拥有的是:

http 流媒体服务器(本地,在 Android 设备上运行)本机 android Media Player RC4 加密实用程序

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

加密文件没问题 - 只需针对加密实用程序的生成位运行整个文件 - 我只是在尝试播放视频时重新执行此操作。问题是当我想“寻找”视频中的一个位置时,例如我想观看一部 2 小时电影的中间部分。我目前正在做的工作,尽管速度很慢,但它是重置 RC4 加密实用程序,提供的数量等于我在视频中跳转到的持续时间。

如果我在这里的解释听起来不是很清楚,请原谅我,但如果你真的使用 RC4 加密和流媒体,你应该遇到同样的问题。

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

每个视频的大小约为 500mb 左右,因此,如果我寻找到视频接近尾声,那么在能够流式传输正确数据之前,大约需要进行 500,000,000 次无用的比特迭代。

4

1 回答 1

5

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

如果您在CTR 模式下使用了例如 AES,那么完成您想要的事情将是微不足道的,因为 CTR 模式被设计为完全可搜索的。

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

于 2012-03-06T08:21:34.160 回答