回答
NSUserDefaults的不来存储这类信息的正确的地方。最好的方法是隐藏Keychain中的用户分数,这样任何人都无法破解它(也许游戏分数与您的货币化想法相关)。
其他好处是,钥匙串可以通过iCloud无缝同步,“这只是作品”。
存储玩家高分的最好方法是在项目中使用以下代码。 下面的方法将帮助您节省在钥匙串中的一些值:
- (void) setValue: (NSData *) value forAccount: (NSString *) account service: (NSString *) service {
NSDictionary *searchDict = @{
(__bridge id) kSecClass: (__bridge id) kSecClassGenericPassword,
(__bridge id) kSecMatchLimit: (__bridge id) kSecMatchLimitOne,
(__bridge id) kSecAttrService: service,
(__bridge id) kSecAttrAccount: account,
(__bridge id) kSecReturnData: @YES,
};
CFDataRef keyData = NULL;
SecItemCopyMatching ((__bridge CFDictionaryRef) searchDict, (CFTypeRef *) &keyData);
if (keyData) {
CFRelease (keyData);
NSDictionary *removeDict = @{
(__bridge id) kSecClass: (__bridge id) kSecClassGenericPassword,
(__bridge id) kSecAttrService: service,
(__bridge id) kSecAttrAccount: account,
};
SecItemDelete ((__bridge CFDictionaryRef) removeDict);
}
if (value) {
NSDictionary *writeDict = @{
(__bridge id) kSecClass: (__bridge id) kSecClassGenericPassword,
(__bridge id) kSecAttrService: service,
(__bridge id) kSecAttrAccount: account,
(__bridge id) kSecValueData: value,
};
SecItemAdd ((__bridge CFDictionaryRef) writeDict, NULL);
}
}
- 其中
value
是您的用户评分归档到NSData的
收拾整成NSData的:
NSUInteger score = <some number>;
NSData *dataValue = [NSData dataWithBytes:&score length:sizeof(score)];
打开包装:
NSUInteger score;
[dataValue getBytes:&score length:sizeof(score)];
account
- 是你的价值的名称,例如@“userScore”,或得分某些用户@“ForzenHeart_Score”service
- 是你的应用程序的名称,你可以用你的包ID[[NSBundle mainBundle] bundleIdentifier]
摆脱钥匙扣保存的数据,使用此方法:
- (NSData *) valueForAccount: (NSString *) account service: (NSString *) service {
NSDictionary *searchDict = @{
(__bridge id) kSecClass: (__bridge id) kSecClassGenericPassword,
(__bridge id) kSecMatchLimit: (__bridge id) kSecMatchLimitOne,
(__bridge id) kSecAttrService: service,
(__bridge id) kSecAttrAccount: account,
(__bridge id) kSecReturnData: @YES,
};
CFDataRef keyData = NULL;
SecItemCopyMatching ((__bridge CFDictionaryRef) searchDict, (CFTypeRef *) &keyData);
return (__bridge_transfer NSData *) keyData;
}
而且不要忘了擦拭所有与用户相关的d ata当你必须时,只需通过nil
作为value
参数为-(void)setValue...
上面列出的方法。
NSUSerDefaults
in 从来没有安全。
要么使用iOS版钥匙扣或将数据上传到服务器(最可靠的方法)
没有NSUserDefaults
不是safe.You可以使用Keychain
。
NSUserDefaults
的内容以纯文本形式存储。他们可以访问和修改工具,如iExplorer
越狱。
如果不是,你可以去NSUserDefaults
一般的问题,NSUserDefaults
应该只包含可以由用户来改变设置。您的应用的内部数据不应存储在NSUserDefaults
中。
使用iOS Keychain
来存储真正安全的数据。
或者,您可以使用加密算法(例如AES)加密存储在NSUserDefaults
中的数据,或将其保存在字典中并将其写入文件。
NSUserDefaults
不安全,因为默认值实际上被键入到设备中本地存储在应用程序文件夹中的.plist文件中。这是目录:.../YourApp.app/Library/Preferences/appBundleName.plist
。这可以非常容易地通过设备上下的工具进行修改和查看,并且不需要越狱设备进行脱机查看。正如其他人所建议的那样,使用iOS Keychain来增加安全性。此外,这里还有一个开源的库,用于保护iOS中的默认设置:Secure-NSUserDefaults。
要直接回答您的问题,对于您不希望用户间接修改的任何敏感数据,这是不够安全。可以轻松地访问和修改NSUserDefaults
。不要将加密数据存储在NSUserDefaults
中,因为它也可以轻松访问。攻击者不会轻易解密数据,但他们仍然可以轻松访问它。 iOS Keychain也不是很安全,因为内容也可以轻松转储,但不能解密。不过为了您的目的,iOS钥匙串没有问题。
请勿使用NSUserDefaults
在本地保存任何东西。这是不安全的。您应该存储在其被加密的keychain
得分,还有小包装类,使保存用户名/密码到keychain
非常简单:
我经常选择coredata这样的情况。关于这一点,有很多方便的&安全框架。现在我使用MagicalRecord框架。这是有用和常用的框架。
您只需将您的模型和decare魔法记录框架创建到您的AppDelegate.m文件。并且您想要正确保存数据的任何地方
- 1. 什么是存储高分的最佳方式?
- 2. 本地存储数据的最佳方式是什么(IOS - xcode)
- 3. 分析Feed时,本地保存的最佳方式是什么?
- 4. 什么是保存用户名和高分的最佳方式
- 5. 什么是存储文本数据的最佳方式?
- 6. 在这个例子中使用本地存储的最佳方式是什么?
- 7. 在iphone上本地存储数据的最佳方式是什么?
- 8. 在iOS中存储/加载本地数据的最佳方式是什么?
- 9. 在swift中存储本地设置的最佳方式是什么?
- 10. 什么是Web应用程序的最佳高容量本地存储选项?
- 11. 存储地形状态的最佳方法是什么?
- 12. 什么是存储对AD组的引用的最佳方式?
- 13. 什么是存储我的2D数据的最佳方式
- 14. 什么是存储高度参数化实体的最佳方式?
- 15. 什么是存储命名范围信息的最佳方式?
- 16. 什么是存储元标签的最佳方式?
- 17. 在mysql中存储html代码的最佳方式是什么?
- 18. 使用Hibernate存储数组的最佳方式是什么?
- 19. 什么是存储NSString的最佳方式?
- 20. 在mysql中存储python timedelta值的最佳方式是什么?
- 21. 什么是存储临时数据的最佳方式?
- 22. 什么是存储趋势数据的最佳方式?
- 23. 存储epub书籍的最佳方式是什么?
- 24. 存储传入流数据的最佳方式是什么?
- 25. 什么是存储这些数据的最佳方式?
- 26. 在Xcode中存储资源的最佳方式是什么?
- 27. 在Docker中存储数据的最佳方式是什么?
- 28. 什么是存储持久对象数组的最佳方式?
- 29. 什么是存储此类数据的最佳方式?
- 30. 什么是存储软件文档的最佳方式?
为什么NSUSerDefaults不安全? – FrozenHeart
@FrozenHeart这里的详细解释 - http://www.andyibanez.com/nsuserdefaults-not-for-sensitive-data/ –
我认为问题不是隐藏/确保高分,但它是NSUserDefaults是可靠的或不。 – mohacs