从keychainItemWrapper iOS

时间:2017-08-16 17:00:21

标签: ios objective-c iphone keychainitemwrapper security.framework

我尝试使用KeychainItemWrapper.hkeychainWrapperItemWrapper.m来存储用户凭据,例如用户名和密码。我目前在用户第一次登录时存储,如下所示:

KeychainItemWrapper* keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"login" accessGroup:nil];
[keychain setObject:_usernameField.text forKey:(__bridge id)kSecValueData];
[keychain setObject:_passwordField.text forKey:(__bridge id)kSecAttrAccount];

这会将值存储在钥匙串中。但是下次用户打开应用程序时我想再次检索用户名和密码。但是,当我打电话给以下人员时:

NSString *password_ = [keychain objectForKey:(__bridge id)kSecValueData];
NSString *username_ = [keychain objectForKey:(__bridge id)kSecAttrAccount];

似乎我得到了奇怪的加密密钥,例如:<6f78696c 69676874 2d746573 74> 有没有办法检索用户名和密码的原始字符串? 我之前从未使用过钥匙扣,任何帮助都会受到赞赏!

2 个答案:

答案 0 :(得分:0)

如果您使用上面链接的包装器https://koenig-media.raywenderlich.com/uploads/2014/12/KeychainWrapper.zip。您可以像这样设置用户名和密码。 我重命名了myObjectForKey和mySetObject的方法。你可以初始化

self.keychainWrapper = [[KeychainWrapper alloc] init];
在你的init方法中

//save user and password
[self.keychainWrapper setObject:username forKey:(__bridge id)kSecAttrAccount];
[self.keychainWrapper setObject:_password forKey:(__bridgeid)kSecValueData];
[self.keychainWrapper writeToKeychain];

//retrieve username and password
NSString *username = [self.keychainWrapper objectForKey:(__bridge id)kSecAttrAccount];
NSString *password = [self.keychainWrapper objectForKey:(__bridge id)kSecValueData];

答案 1 :(得分:0)

为什么不使用这个 https://redflowerinc.com/keychain-wrapper-in-objective-c/

NS_ASSUME_NONNULL_BEGIN

@interface KeyChainWrapper : NSObject
+(NSMutableDictionary*) queryDictionary:(NSString*) identifier;
+(NSString*) searchKeychainCopyMatching:(NSString*) identifier;
+(bool) createKeychainValue:(NSString*) value forIdentifier:(NSString*) identifier;
+(bool) updateKeychainValue:(NSString*) password forIdentifier:(NSString*) identifier;
+(void) deleteKeychainValue:(NSString*) identifier;
@end

NS_ASSUME_NONNULL_END