隐藏(或加密)应用资源?

时间:2011-02-21 17:20:08

标签: objective-c cocoa macos

我正在开发一个具有某些资源(图像)的Cocoa应用程序,我希望保护它,但仍会显示。通常只需将它们放在资源文件夹中,但存储在那里可以很容易地抓取和使用它们。有没有办法隐藏这些图像,但仍然可以在应用程序中访问它们?

3 个答案:

答案 0 :(得分:9)

简单解决方案:

将所有文件合并到一个大数据文件中,可选择使用“salt” 然后使用以下内容检索特定文件:

NSData *dataFile = [NSData dataWithContentsOfFile:filePath];  
NSData *theFile = [dataFile subdataWithRange: NSMakeRange(startPos,endPos)];

这并不能真正保护文件,
但是阻止人们简单地拖出资源 至少,数据文件是无法使用的,当然还有盐。

另一种解决方案:

为每个资源创建NSData对象 将所有对象添加到NSMutableArray 将数组转换为一个大的NSData对象 将NSData对象写入文件 并将其添加到资源文件夹。

然后您的应用可以读取数据文件 并使用资源检索数组。

// Convert array to data
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:theArray];

使用NSKeyedUnarchiver再次检索数组。

答案 1 :(得分:3)

为了保护一个大文件中的图像,您可以按顺序将图像数据转储到NSData对象。

如果需要,您可以使用Salt,如前所述,或者您可以使用AES加密方法,如here所示。

然后,您必须在结构上保存图像文件(使用NSArray或类似文件)或记录图像偏移量,以便正确检索图像数据块。

这有一些缺点,特别是如果您的图像随时间变化。这样,您将必须监视这些更改并相应地重新构造文件。

在其他选项上,您可以通过将名称/扩展名更改为您选择的名称来简单地屏蔽图像文件。这将使一些用户远离触摸。

最后,您可以使用类似zip的函数搜索一些归档框架,并将图像保存在那里(正如暴雪使用的MPQ格式)。这将是最好的选择(因为它为您提供加密方法,并且它抽象了加密和存档的机制),但是找到这样的框架可能并不容易。

答案 2 :(得分:-2)

为什么要保护图像?毫无疑问,您显示的任何内容都可以使用屏幕截图进行录制,因此如果您尝试保护图像不受观看者的影响,则没有太多意义。

如果您仍想保护它们(例如,某些图像仅供某些人使用),则可以选择在磁盘上加密它们。我不是一个Objective-C家伙,但这1似乎是个好看的地方。