Android 加密音频播放器

ak9*_*k93 4 java encryption audio android

我将如何在音频播放器 Android 应用程序中播放一组加密的音频文件?

我有一个应用程序项目,其中将一组加密的音频内容存储在用户设备上。在这种情况下,单个音频内容(例如:播客)将包含多个加密文件。该应用程序充当音频播放器,用户通过它收听音频内容。为了获得良好的用户体验,整个内容(播客)应该从一个文件无缝播放到另一个文件。这对于使用 android 的 MediaPlayer 类的普通音频文件来说非常有效。

为了安全措施,解密的文件在任何时候都不应该出现在用户设备存储上,这样用户就可以通过我的应用程序之外的任何其他方式访问该文件(即使在 root 设备上)。

要使用的加密类型尚未确定,因此我对最适合这种情况的任何算法持开放态度。

我考虑过在播放每个文件之前对其进行解密。文件大小最大为25MB,对此类文件进行AES加密/解密大约需要300毫秒,因此不会对用户体验造成太大影响。

我在这里看到两种不同的解密方法存在两个问题:

  1. 如果我解密文件并将其作为普通音频文件存储在设备上,用户将能够访问它(已root的设备)并在我的应用程序之外使用它。
  2. 如果我解密一个文件并将其保存在系统内存中(比如说字节数组),我如何将其播放给用户?我没有找到使用 MediaPlayer 来执行此操作的方法,或者找到了任何其他可以开箱即用的库。也许可以修改某些音频流库以播放解密的文件流?

Bud*_*ius 5

在我看来,最简单的方法是使用ExoPlayer,它是 Google 开发的开源媒体播放器。他们在这个项目上处理了很多边缘情况,这是一个不错且可靠的播放器。

最重要的是,您的需求几乎是开箱即用的,很容易实现。

您只需使用AesCipherDataSource包装 a来加载播放器FileDataSource

因此,您的文件使用 AesCihper 进行本地加密,并由播放器本身逐块即时解密。

以下是他们的开发指南的链接:https://google.github.io/ExoPlayer/guide.html 和 AesCipher http://google.github.io/ExoPlayer/doc/reference/com/google/android /exoplayer2/upstream/crypto/AesCipherDataSource.html