2014-06-24 3 views
0

확인.iOS, 키 체인 : 잘못된 암호 코드 출력

KeychainItemWrapper *keychainWrapper = 
[[KeychainItemWrapper alloc] initWithIdentifier: 
[[[NSBundle mainBundle]infoDictionary] objectForKey:@"CFBundleIdentifier"] accessGroup:nil]; 
passcodeViewController.passcode = [keychainWrapper objectForKey:(__bridge id)(kSecValueData)]; 
NSLog(@"Pass: %@",[keychainWrapper setObject:_passcode forKey:(__bridge id)(kSecValueData)]); 

그리고 악 : 나는 암호를 검색하려고 나중에 AppDelegate에있는 1234의 가정 할 수 있습니다

KeychainItemWrapper *keychainWrapper = 
[[KeychainItemWrapper alloc] initWithIdentifier: 
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"] accessGroup:nil]; 

[keychainWrapper setObject:@"theUser" forKey:(__bridge id)(kSecAttrAccount)]; 
[keychainWrapper setObject:_passcode forKey:(__bridge id)(kSecValueData)]; 
NSLog(@"Saved pass: %@",_passcode); 
NSLog(@"Returned pass: %@",[keychainWrapper objectForKey:(__bridge id)(kSecValueData)]); 

NSlogs 내가 설정 한 것과 같은 문자열을 반환 : 나는 뷰 컨트롤러의 사용자 암호를 설정 온다. NSLog는 31323334를 반환합니다. 내가 뭘 잘못하고있는 걸까요?

답변

2

키 체인은 NSData이 아닌 NSString으로 암호를 저장합니다. 암호를 저장하기 전에 암호를 입력해야합니다.

NSData * passcodeData = [_passcode dataUsingEncoding:NSUTF8StringEncoding]; 
[keychainWrapper setObject:passcodeData forKey:(__bridge id)(kSecValueData)]; 

마찬가지로 검색된 개체는 디코딩해야 할 NSData입니다.

NSData * passcodeData = [keychainWrapper objectForKey:(__bridge id)(kSecValueData)]; 
passcodeViewController.passcode = [[NSString alloc] initWithBytes:[passcodeData bytes]                
                  length:[passcodeData length] 
                 encoding:NSUTF8StringEncoding]; 
+0

정확히! 나는 그것이 해쉬가 나를 어떻게 돌려 주는지 궁금해했다. 확실한! 공장. 감사! – NCFUSN

관련 문제