Android 如何使用NaCl实现可查找的媒体输入流进行解密
我们有一个由文档和媒体文件组成的产品,这些文件经过加密以保护DRM。在生产端,我们有一个加密文件的Python脚本,在客户端,有一个解密文件的Android应用程序。这意味着我们需要一个加密/解密方案,可以在Python和Android平台上兼容工作。我选择了libnail/NaCl,因为它在上可用,是免费的,开源的,并且它设计了高级API,应该提供“默认原语的专家选择”(Expert selection of default primitives)),从而帮助开发人员正确配置,而不必是密码参数细节方面的专家 基于这一点,我已经成功地测试了在Python上用NaCl加密的数据可以在Android上用NaCl解密。在钠方面投入了相当多的学习时间,所以如果可能的话,我不想改变这一点 然而,在Android端播放受DRM保护的大型视频时,我认为我们需要一个能够用于流媒体的解决方案,而不仅仅是将整个文件解密到内存中。目前,我们正在将整个文件读入内存并解密:Android 如何使用NaCl实现可查找的媒体输入流进行解密,android,encryption,streaming,libsodium,Android,Encryption,Streaming,Libsodium,我们有一个由文档和媒体文件组成的产品,这些文件经过加密以保护DRM。在生产端,我们有一个加密文件的Python脚本,在客户端,有一个解密文件的Android应用程序。这意味着我们需要一个加密/解密方案,可以在Python和Android平台上兼容工作。我选择了libnail/NaCl,因为它在上可用,是免费的,开源的,并且它设计了高级API,应该提供“默认原语的专家选择”(Expert selection of default primitives)),从而帮助开发人员正确配置,而不必是密码参数
final byte[] plainBytes = secretBox.decrypt(nonce, cipherText);
显然,对于大的视频文件来说,这不太好用。如果我们使用javax.crypto.Cipher而不是Na钠,我们可以使用它来实现CipherInputStream(并使用它来实现exoplayer2.upstream.DataSource或其他东西)。但是我很难看到如何使用libnaid实现解密流
我用来“流”函数的libnaudio库。但“流”的这个含义似乎与Java InputStream意义上的“流”有些不同。此外,所有这些函数似乎都非常特定于低级别的详细参数,到目前为止,libnaudio还没有要求我知道这些参数。例如,chacha20
,salsa20
,xsalsa20
,xchacha20poly1305
,等等。到目前为止,我不知道这两种算法中的哪一种在任何一方使用;秘密箱刚刚工作
所以我想我最想回答的问题是,如何在Android中使用LibNasdaq来提供可查找的流式解密?你知道有什么好的示例代码吗
其中的子问题:
- 诚然,现在我仔细查看文档,我看到了pynacl SecretBox流密码。我不知道我是否能一直相信这一点,因为我应该远离那些细节
- 我认为,对于媒体播放,你需要的不仅仅是流媒体,也就是说,你可以一次按顺序消费一小块。对于典型用法,您还需要它是可查找的:用户希望能够向后跳5秒,而不必等待播放器重置到流的开头,并在5秒之前再次处理/解密整个内容
- 我是否可以在Android端使用javax.crypto.Cipher,但将其配置为与加密算法(XSalsa20)及其PyNaCl SecretBox生产过程中的参数兼容
- 解密密钥传递的问题已经得到了满意的解决,所以这不是我在这里寻求帮助的原因
- 我们的应用程序完全离线,所以我提到的流媒体问题与从本地存储加载和解密文件有关,而不是等待下载
- HLS AES加密
- 破折号密钥加密