【问题标题】:XOR or other simple file obfuscation method ios objective c异或或其他简单的文件混淆方法 ios objective c
【发布时间】:2012-05-26 06:28:05
【问题描述】:

我正在开发一个使用受版权保护的 pdf 文件的 ios 应用程序。我正在寻找一些简单的方法来混淆文件以确保安全,这些方法不需要我通过额外的大众市场 CCATS 加密审查过程,但也将确保版权所有者我已尽我所能保护他们的数据安全。我当然用密码保护文件,但我想更进一步。是否有一种简单的方法来异或或以其他方式散列或混淆我将在我的服务器上托管的 pdf 文件,然后让 ios 设备下载它并使用 Objective-c 代码将其恢复为常规密码保护的 pdf 文件,以便它可以保存它在文档目录中(我并不担心它在设备上的安全性,就像它在服务器上一样)。我认为这对于任何文件类型都是相同的。

因此,为了澄清起见,我正在我的桌面上寻找一种简单的 XOR 或 Hash 混淆/加密方法,该方法具有相应的目标 c 代码,ios 设备可用于在下载后快速解码我的文件并将其保存到文档目录。

非常感谢!

这是一个关于 CCATS 限制的答案以供参考... Need to apply for CCATS if using simple XOR cipher?

【问题讨论】:

  • 如果你只是想保护你的IP,你真的需要CCATS吗?如果您使用加密来保护 IP(= 受版权保护的材料),似乎有一个例外。

标签: objective-c ios xcode pdf encryption


【解决方案1】:

无论您如何下载文件,您最终都可能得到NSData?如果是这样,无论您在哪里都可能有这样的东西:

[myData writeToFile:...]

只需冲过所有字节并应用您的 XOR。假设它是一个密集的 8 位模式,那就是:

/* assuming myData is mutable... take [data mutableCopy] if required */
uint8_t *bytes = (uint8_t *)[myData mutableBytes];

for(int index = 0; index < [myData length]; index++)
    bytes[index] ^= 0xe8; // or whatever your mask is

这表明了应用更长模式的最简单的方法:

uint8_t *bytes = (uint8_t *)[myData mutableBytes];
uint8_t pattern[] = {0xe8, 0xf4, 0x98, 0x32, 0x63}; // or whatever
const int patternLengthInBytes = 5;

for(int index = 0; index < [myData length]; index++)
    bytes[index] ^= pattern[index % patternLengthInBytes];

以 32 位步骤进行会稍微快一些,但保存到磁盘可能是唯一需要大量成本的事情,而且至少非常清楚。

【讨论】:

  • 太好了,有了一个可可应用程序,我得到了它的魔力并保存到桌面。这些 1mb 文件有点耗时,但我想我可以增加模式长度或部分异或来解决这个问题。愚蠢的问题,但因为它是 xor 来使用相同的方法(本质上再次在数据上运行该方法)?
  • 就像注释一样,它不喜欢“mutableBytes”,但“bytes”工作得很好,为了时间的缘故,我将 for-loop 的引用更改为较小的数字,但它给出了我与没有 pdf 坐在网上供全世界查看的效果相同。再次感谢!
  • NSMutableDatamutableBytes,但标准NSData 没有。您不应该更改通过 bytes 访问的数据,因此,如果您现在或针对未来版本的操作系统发现任何奇怪的行为,首先要检查一下。
  • 感谢您的澄清!我将使用NSMutableData
猜你喜欢
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 2012-09-12
  • 2019-07-16
相关资源
最近更新 更多