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