gpt4 book ai didi

java - 使用网络代理 (nanoHTTPD) 动态传输[随机访问]加密 (AES-CTR) 视频

转载 作者:行者123 更新时间:2023-12-02 05:14:19 25 4
gpt4 key购买 nike

我有一个加密的(128-AES-CTR-NoPadding)视频驻留在服务器上,我需要在下载时对其进行解密,以便用户可以流式传输它(在普通播放器/网络中)。

我了解该解决方案的组成部分以及如何将它们组合在一起才能完成这项工作。它部分有效,但其余部分我无法正确实现流媒体。过去一周我一直在阅读和学习示例(其中大部分是在磁盘上播放文件,这里不是这种情况),并得出结论,这超出了我的能力范围,我需要一些帮助。

详细信息

我正在使用轻量级网络服务器 ( nanoHttpd ) 作为代理,从远程服务器下载加密数据并提供解密数据。以下是我的 NanoHTTPD.serve 方法中的主要代码。

//create urlConnection to encrypted video file with proper headers (ie range headers) as request received by the proxy server
InputStream inputStream = new CipherInputStream(cipher, urlConnection.getInputStream());
return newChunkedResponse(status, contentType,inputStream);

现在,如果我访问 NanoHttpd 网络服务器 ( http://localhost:9000 ),文件就会开始下载,下载完成后,文件将完全解密并可按预期播放。因此,这可以确保从服务器获取加密数据并提供解密数据正常工作。但是,当任何视频播放器(html5、vlc)被要求从该 URL 流式传输视频时,它根本不起作用。

如果上面NanoHTTPD.serve中的代码改为

//create urlConnection to cleardata video file with proper headers (ie range headers) as request received by the proxy server
InputStream inputStream = urlConnection.getInputStream();
return newChunkedResponse(status, contentType,inputStream);

然后尝试从上述播放器进行流式传输,效果会很好。因此,这可以确保 Web 代理正确检索和提供数据。

潜在问题为了支持来自视频播放器的范围请求,我们需要正确地跳到密码 block 大小的倍数的 block 边界。因此,当视频播放器请求带有 header 的数据(范围:字节 34-44)时,CipherInputStream 可能无法解密数据,因为输入流具有 34-44 的数据。但我不知道如何使用 urlConnection.getInputStream() 和 CipherInputStream 来做到这一点。

但即使没有这个,它至少应该开始播放前几秒,因为视频播放器发送的第一个请求是(范围:0-),这意味着 inputStream 从索引 0 开始,因此 CipherInputStream 应该能够解密并提供这些初始字节,并且视频应该继续播放。

我完全不知所措,因为我不知道如何调试它。欢迎任何想法、示例代码,我将尝试并在此处发布结果。

最佳答案

我已经弄清楚了。我将在这里为其他人发布解决方案。

这里的问题是范围请求。如果代理没有向这些范围请求发送正确的响应,则播放将失败。由于多种原因,这可能会失败。

  1. 您对远程服务器的请求缺少正确的范围 header 。
  2. 您对远程服务器的请求正在返回正确范围的数据,但您没有正确解密它。这就是我的情况。当然,这个解密过程会因密码而异。对我来说,我使用了(AES/CRT/NOPADDING),我为偏移量提供了正确的 iv 。描述了如何计算偏移量的 iv here .

就代码示例而言,我只需在之前添加一行

InputStream inputStream = new CipherInputStream(cipher, urlConnection.getInputStream());
return newChunkedResponse(status, contentType,inputStream);

这是

jumpToOffset(cipher,....);

此后一切正常,包括视频搜索。

关于java - 使用网络代理 (nanoHTTPD) 动态传输[随机访问]加密 (AES-CTR) 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56307090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com