Spa*_*Dog 4 cocoa keychain ios keychainitemwrapper
可以钥匙扣使用像NSUserDefaults类固醇?我的意思是,例如,存储NSData在游戏中使用?
我的意图是存储一个NSData基本上是数组或字典表示的元素.
所以问题是:
假设我使用Apple的KeychainItemWrapper类创建了一个包装器.这是kSecValueData在引用NSData对象的钥匙链文档中提到的吗?
如果是这样我可以这样做,对吗?
NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:myArrayOfDicts];
KeychainItemWrapper* keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"myID" accessGroup:nil];
[keychain setObject:myData forKey:kSecValueData];
Run Code Online (Sandbox Code Playgroud)
第二个问题:如果是这种情况,NSData可以存储在钥匙串项目上的大小是否有限制?
我认为没有任何限制,你绝对可以存储NSData,但性能不会很好.引用Apple的文档:
钥匙串用于存储特定于您的应用的少量敏感数据.它不是用于加密和存储数据的通用机制.
我不会在钥匙串条目中存储超过1KB左右,您还应该避免使用大量的钥匙串条目.
如果需要加密大量数据,则应生成随机AES-256密钥并将密钥存储在密钥链中,然后使用AES加密大数据.在keychain上查找RNCryptor以获得一个好的库来正确实现它并在security.stackexchange.com上询问任何特定的加密问题.
我也不会在NSUserDefaults中存储大量数据.它也不打算以这种方式使用.数据应存储NSSearchPathDirectory在iCloud中定义的相关目录之一的文件中,或者存储在iCloud中.
这是性能问题.用于处理钥匙串和用户默认值的所有代码都基于假设只有少量数据.它对于少量数据来说非常快,但是更大的数量会浪费内存和CPU周期/电池电量.在钥匙串的情况下,您也在浪费用户的LTE带宽,因为每次更改都将通过互联网发送到他们拥有的每个设备.
我不认为Apple的应用程序审核小组会积极执行这些内容,但从技术上讲,它违反了将API用于除预期目的之外的任何规则.
| 归档时间: |
|
| 查看次数: |
2175 次 |
| 最近记录: |