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

jos*_*hus 3 java encryption video android rc4-cipher

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

所以我拥有的是:

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

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

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

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

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

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

Hen*_*röm 5

不,RC4算法不可寻找.密钥流生成的每次迭代涉及使用两个元素的有状态交换来置换密钥相关S置换,其方式是难以再现而不实际执行所有中间交换.

如果你在CTR模式下使用了AES,那么完成你想要的东西将是微不足道的,因为CTR模式被设计为完全可寻找的.

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