2016-12-07 1 views
1

내 애플리케이션에 오프라인 로그인을 구현해야합니다. 현재 키 체인에 비밀번호를 저장하고 있는데, 앱이 온라인 일 때 적어도 한 번 이상 로그인에 사용되었습니다.하지만 지금은 사용자 이름 비밀번호 조합을 확인하지 않습니다. 단일 장치에 대해 여러 명의 사용자가있는 경우 암호 만 저장하면 충분하지 않습니다. 따라서 아무도 보안 위반없이 수행 할 수있는 것을 제안 할 수 있습니까?키 체인에 사용자 이름 - 비밀번호 조합을 암호화 된 형식으로 저장하는 방법

+0

마 음은 모든 사용자하거나 마지막을 기억하고 싶은 보안을 개선하기 위해 암호의 md5 값을 인코딩 할 수 있습니다? – CZ54

+0

@bobby : 모든 사용자를 기억해야합니다. – iOSManiac

+2

로그인을 키로 사용하여 비밀번호를 저장하는 것이 좋습니다. [email protected]/password와 같은 것입니다. 보안 향상을 위해 패스 코드의 md5 값을 인코딩 할 수 있습니다. – CZ54

답변

1

을 당신이 열쇠로 로그인을 사용하여, 암호를 저장하는 것이 좋습니다. 다음과 같습니다 : [email protected]/password.

당신은 너무

0

당신이 NSURLCredential을 사용할 수있는이 link

스토어에 의존

NSURLCredential *credential; 

credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent]; 
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace]; 

데이터 저장이

NSURLCredential *credential; 
NSDictionary *credentials; 

credentials = [[NSURLCredentialStorage sharedCredentialStorage] credentialsForProtectionSpace:self.loginProtectionSpace]; 
credential = [credentials.objectEnumerator nextObject]; 
NSLog(@"User %@ already connected with password %@", credential.user, credential.password); 
0

당신은 저장하기위한 장치 키 체인에 저장할 수 있습니다 받기 민감한 정보. 암호를 검색하려면 SHA512

#import "KeychainWrapper.h" 
#include <CommonCrypto/CommonDigest.h> 

-(void)createSHA512andSaveToKeychain:(NSString*)unencryptedPasswd { 
    const char *passwdBytes= [unencryptedPasswd cStringUsingEncoding:NSUTF8StringEncoding]; 
    NSData *passwordData = [NSData dataWithBytes:passwdBytes length:unencryptedPasswd.length]; 
    uint8_t digest[CC_SHA512_DIGEST_LENGTH]; 
    CC_SHA512(passwordData.bytes, passwordData.length, digest); 
    NSMutableString *encryptedPasswd= [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2]; 
    for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++) { 
     [encryptedPasswd appendFormat:@"%02x", digest[i]]; 
    } 

    // Save the password in the device keychain 
    KeychainWrapper *keychainWrapper = [[KeychainWrapper alloc] init]; 
    [keychainWrapper mySetObject:encryptedPasswd forKey:(__bridge id)kSecValueData]; 
    [keychainWrapper writeToKeychain]; 
} 

와 암호를이 Ray Wenderlich tutorial에서 래퍼를 다운로드 및 암호화 :

// Retrieve the pwd from the device keychain 
KeychainWrapper *keychainWrapper = [[KeychainWrapper alloc] init]; 
NSString *pwd = [keychainWrapper myObjectForKey:@"v_Data"]; 
+0

검색된 암호를 올바른 사용자 이름과 일치시킬 수 있습니까? 같은 장치에 대해 여러 명의 사용자가 있습니다 – iOSManiac

+0

예. 여러 암호 (및 사용자 이름)를 저장해야하는 경우 Apple의 다른 래퍼가 필요합니다. 이 링크를 참조하십시오 : http : //devmonologue.com/ios/ios/storing-sensitive-information-in-the-phones-keychain/ 기본적으로 "initWithIdentifier :"메소드를 사용하여 사용자 지정 초기화 프로그램으로 키 체인 클래스를 초기화합니다. – Alex

관련 문제