保存用户名和密码 Objective C iPhone

5
我有一个文本框,
数字和密码
我不知道如何保存这些设置,然后在应用程序启动时读取它们以检查它们是否已经设置。
谢谢
梅森
2个回答

13
敏感信息应存储在设备的加密安全位置——钥匙串中。如果你将用户名和/或密码保存在NSUserDefaults中,则是以明文方式保存,这本质上是不安全的。
互联网上有很多使用iPhone上的钥匙串的例子,包括可以在你的代码中使用的简单包装器。例如,这里有一些非常好的Github代码,使得使用起来相当容易: http://github.com/ldandersen/scifihifi-iphone/tree/master/security

1
比我的回答更好。感谢提供信息。当然,任何开发者都应该确定他们自己的应用程序需要多少安全性,并了解使用钥匙串的缺点(模拟器支持、设置应用程序支持、增加复杂性和开发时间)。 - Steve

5

保存:

[[NSUserDefaults standardUserDefaults] setValue:_email forKey:@"email"];
[[NSUserDefaults standardUserDefaults] setValue:_password forKey:@"password"];
[[NSUserDefaults standardUserDefaults] synchronize];

阅读:

_email = [[NSUserDefaults standardUserDefaults] stringForKey:@"email"];
_password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password"];

在你的情况下:

[[NSUserDefaults standardUserDefaults] setValue:Number.text forKey:@"Number"];

并且:

NSString * number = [[NSUserDefaults standardUserDefaults] stringForKey:@"Number"];

“Key”通常是硬编码的,就像存储中的“变量名”,用于典型的名称/值对,例如字典。

在读取后检查值是否已设置:

if (number) ...

1
所以对于名为Number的文本字段,它是一个IBOutlet,我会使用以下代码:[[NSUserDefaults standardUserDefaults] setValue:_number forKey:Number.text]; [[NSUserDefaults standardUserDefaults] setValue:_password forKey:Password.text]; [[NSUserDefaults standardUserDefaults] synchronize]; - user393273
这个可以运行,但是不安全。你应该将敏感信息存储在钥匙串中。 - Dave DeLong
1
哦,我明白了,我需要等待3分钟才能接受答案,所以我不是故意忽略你的 :) - user393273
@dave 我猜是可以的,但我认为你不能从“设置”应用程序中显示/编辑钥匙串信息...(我可能在这里很容易犯错)...所以如果您想在设置应用程序中显示用户名,则必须使用用户默认值...此外,我不太清楚钥匙串在这里的价值在哪里...手机上的设置已经加密了,如果用户关心这些东西,他们应该在手机上使用密码锁。David,您能否发布一个使用Keychain的答案?我很感兴趣。 - Steve
1
@sw12345,你可以轻松地打开某人的iPhone备份,并从明文NSUserDefaults文件中剥离出密码。使用钥匙串。这就是它的作用。 - Dave DeLong
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接