如何在ios编程中使用Keychain

时间:2013-02-26 10:35:53

标签: ios objective-c iphone keychain

我正在使用Apple提供的Keychain包装类。 在我的应用程序中,我想存储和检索登录用户的用户名和密码。当应用程序再次启动时,它应该检查钥匙串中的登录凭据并让用户进入应用程序(自动登录)。尝试了一些示例代码。一切都没有成功。请帮我解决这个问题。

感谢。

4 个答案:

答案 0 :(得分:16)

使用PDKeyChainBindings

这是使用方法:

PDKeychainBindings *bindings = [PDKeychainBindings sharedKeychainBindings];
[bindings setObject:@"myuser" forKey:@"username"];
[bindings setObject:@"kmypass" forKey:@"password"];

//How to retrieve
NSString *username = [bindings objectForKey:@"username"];
NSString *password = [bindings objectForKey:@"password"];

答案 1 :(得分:6)

您可以使用钥匙串访问更安全地保存您的凭据信息。为此,请遵循以下指南和样本。

1)Keychain Services Programming Guide

您可以通过Apple在本文档中找到所有内容。

2)GenericKeychain

这个apple示例代码显示了如何添加,删除和更新钥匙串值。

如果您有任何问题,请告诉我。 希望这对你有帮助。

答案 2 :(得分:1)

#import "SFHFKeychainUtils.h"
#define KEYCHAIN_SERVICE_KEY   @"MyKey"
#define KEYCHAIN_ID @"agsfs46edt3g3jd38jh3g3g3g3g38f3dkiuytr453"
#define KEYCHAIN_PSD @"a1s2s3d4edt3g3jd38jh3g3g3g3g38f3dfgffgdd"

//检查

NSError *error = nil;
    NSString *password = [SFHFKeychainUtils getPasswordForUsername:KEYCHAIN_ID andServiceName:KEYCHAIN_SERVICE_KEY error:&error];

    if ([password isEqualToString:KEYCHAIN_PSD])
        return YES;

//保存

NSError *error = nil;
        [SFHFKeychainUtils storeUsername:KEYCHAIN_ID  andPassword:KEYCHAIN_PSD forServiceName:KEYCHAIN_SERVICE_KEY updateExisting:YES error:&error];

答案 3 :(得分:0)

看看ACSimpleKeychain。它提供了Keychain的简单抽象,使您可以安全地轻松保存密码。

例如,保存用户名和密码:

if ([keychain storeUsername:@"user1" password:@"password" identifier:@"account1" forService:@"twitter"])
{
    NSLog(@"SAVED credentials for username 'user1' credentials identifier 'account1'");
}

检索密码:

NSDictionary *credentials = [keychain credentialsForUsername:@"user1" service:@"twitter"];
NSLog(@"CREDENTIALS: service: %@, identifier: %@, username: %@, password: %@",
    [credentials valueForKey:ACKeychainService],
    [credentials valueForKey:ACKeychainIdentifier],
    [credentials valueForKey:ACKeychainUsername],
    [credentials valueForKey:ACKeychainPassword]);