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