这是NSObject的一个类别,允许您保存和加载您的对象。它使用了NSObject+ObjectMap基础类别,并进一步扩展。该类还包括了AES256加密/解密,以便在保存和加载NSObjects时可选地保护它们。
将包括的NSObject+ObjectIO.{h,m}
类拖入您的项目,并在您想要使用它们的类中导入它们。
链接到框架
根据应用上下文,将NSObjects保存到磁盘可能非常有用。此函数同时适用于iOS和OSX,可以在保存时保持您的NSObjects及其属性。要将NSObject保存到磁盘,请使用-(void)saveToUrl:completion:
方法。
考虑因素
关于盐的说明:在当代加密中,加盐密码被视为良好的做法。这为输入密码增加了一层防护,即使攻击者知道您的密码,也需要额外的信息才能获取到数据的真正内容。使用PBKDF2作为密钥导出函数,支持密钥拉伸以增加安全性。我们使用名为[NSMutableData generateSalt]
的方法来生成用于加密/解密的随机ASCII字符串盐。由于这返回NSString,您应将盐存储在可检索和使用的地方,而不是在项目中的明文。对于此目的,keychain应该工作得很好,但今天的其他常见方法包括私有配置文件或数据库查询。**请务必保存此盐,因为它对于解密文件并将它们重新解析回NSObjects至关重要**!
这里有一些生成盐和将文件保存到桌面的样本代码。
NSString *salt = [NSMutableData generateSalt];
NSString *fileName = @"Filename.extension";
//Save document
[MyObject saveToDocumentsDirectoryWithName:fileName reducedFileSize:YES password:@"Password" salt:salt completion:^(NSError *error) {
if(!error){
//Success
}
else {
//Fail
}
}];
从磁盘加载数据对象与保存一样简单。只需使用-(id)objectFromURL:password:salt:
方法。使用此方法唯一要考虑的是在使用之前确保已为你创建并初始化NSObject。如果加密了文件,希望你在某个安全的地方保存了盐。使用示例如下:
__block MyNSObject *newObject = [[MyNSObject alloc] init];
[newObject loadFromDocumentsDirectoryWithName:fileName password:@"Password" salt:salt completion:^(id object, NSError *error) {
if(!error){
//Assign object
newObject = (MyObject *)object;
}
else {
//Fail
}
}];
我们在加密/解密方面添加了一些安全性较高的功能,但随着标准和最佳实践的变更,跟踪这些领域将是幸运的。因此,如果您想添加pull-request或打开Issue讨论加密方法以确保其密码学上无懈可击,请不要犹豫。