我正在构建一个 MP3 服务,在线文件从 Internet 流式传输并保存在本地存储中(以防止未来的数据流量)。考虑到这一点,我想加密本地文件或不要在我的应用程序之外使用。我设法加密/解密文件,但无法将字节数组加载到声音对象中。此外,文件的解密大约需要 5 秒,这太长了。
我正在考虑使 MP3 损坏,然后再次重写文件。有人可以在这件事上帮助我吗?
谢谢
我正在构建一个 MP3 服务,在线文件从 Internet 流式传输并保存在本地存储中(以防止未来的数据流量)。考虑到这一点,我想加密本地文件或不要在我的应用程序之外使用。我设法加密/解密文件,但无法将字节数组加载到声音对象中。此外,文件的解密大约需要 5 秒,这太长了。
我正在考虑使 MP3 损坏,然后再次重写文件。有人可以在这件事上帮助我吗?
谢谢
我必须为我去年构建的 VOD 应用程序做类似的事情。我遇到了和你一样的问题:客户要求视频可以下载,但不能在应用程序以外的任何地方观看。由于各种原因,DRM 是不可能的,所以我们决定使用加密。我们的第一个方案太慢了(在 iPad 3 上 5-10 秒),所以我们决定改为销毁文件。
基本上,您需要查看文件格式的结构。对于我的格式,前 32 个字节是标题。我们不想破坏标题,因为它对文件至关重要,我们不想冒险破坏它。因此,我们查看了标题之后的数据。我们决定将字节 33 的每 16KB 中断为 1024KB 或其他内容(由于显而易见的原因,我不会说出确切的范围)。
我们的中断模式很简单,很容易逆转(如果你想播放文件,显然需要):
byte = MAX_BYTE_VALUE - byte;
这基本上会翻转值。因此,如果MAX_BYTE_VALUE
是 10 并且字节是 3,则变为 7。如果为 7,则变为 3。它不可能超出范围,也不可能破坏模式。所以我们在文件开头的一小部分字节上运行它,总共大约 60-100 字节,我们的视频文件仍然可以播放,但不再存在声音并且图像完全损坏(大块紫色和带有大量静电的粉红色)也是如此。
显然,DRM 解决方案可能会更好。但客户坚持不使用 DRM,并坚持我们使用加密方法。这种方法有效且高效,导致我的应用程序在运行时没有丢帧。希望这能让您了解如何做到这一点。