2011-11-08 3 views
1

사용자 이름과 암호를 입력하는 두 개의 텍스트 필드가 있습니다. 사용자가 사용자 이름과 암호를 입력하고 "저장"버튼을 클릭하면 사용자 이름과 암호가 SQLite 데이터베이스에 저장됩니다.SQLite 데이터베이스에서 암호를 암호화 하시겠습니까?

더 많은 보안을 위해 암호화 된 형식으로 사용자 이름과 암호로 저장하려고합니다. u는 첫째 MD5로 문자열을 변환하고 데이터베이스에 저장된 암호 필드와 그 해시를 비교하는 것도 한 검색하는 동안

+0

당신은 사용자 이름과 암호를 모두 암호화 저장 하시겠습니까? 보통은 암호화 된 상태로 저장된 암호입니다. – Deco

+0

@Deco 나중에 사용자 이름과 암호가 모두 암호화되어 저장됩니다. – Rani

답변

0

사용이 MD5 해시 알고리즘은 암호를

const char *cStr = [self UTF8String]; 
unsigned char result[16]; 
CC_MD5(cStr, strlen(cStr), result); // This is the md5 call 
return [NSString stringWithFormat: 
    @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", 
    result[0], result[1], result[2], result[3], 
    result[4], result[5], result[6], result[7], 
    result[8], result[9], result[10], result[11], 
    result[12], result[13], result[14], result[15] 
    ]; 

을 저장합니다.

+0

해싱은 암호화가 아닙니다. 원래 비밀번호를 나중에 서버로 보내야하는 경우에는 작동하지 않습니다. –

+0

원래 비밀번호를 가져올 필요가 없습니다. 주어진 암호의 해시 값과 데이터베이스의 해시 값 저장소를 비교하면됩니다. 동일하면 주어진 암호가 맞습니다. _salt_와 함께 암호를 해시해야한다고 덧붙이고 싶습니다. 또한 MD5는 안전하지 않습니다. SHA-256을 사용하는 것이 좋습니다. – wannik

1

문자열을 암호화하고 해독하는 2 가지 방법을 정의하고 있습니다. 어느 것이 더 쉽게 좋아하는지 선택했습니다.

방법 1 개

- (NSData*) encryptString:(NSString*)plaintext withKey:(NSString*)key { 
    return [[plaintext dataUsingEncoding:NSUTF8StringEncoding] AES256EncryptWithKey:key]; 
} 

- (NSString*) decryptData:(NSData*)ciphertext withKey:(NSString*)key { 
    return [[[NSString alloc] initWithData:[ciphertext AES256DecryptWithKey:key] 
            encoding:NSUTF8StringEncoding] autorelease]; 
} 

방법이

NSString *plainString = @"This string will be encrypted"; 
NSString *key = @"YourEncryptionKey"; // should be provided by a user 

NSLog(@"Original String: %@", plainString); 

NSString *encryptedString = [plainString AES256EncryptWithKey:key]; 
NSLog(@"Encrypted String: %@", encryptedString); 

NSLog(@"Decrypted String: %@", [encryptedString AES256DecryptWithKey:key]); 
+0

은 WAY 2에 있습니다 : 키는 그냥 nsstring U입니다. u는 그 이름을 뭐라 할 수 있겠습니까? –

+0

2 시도했지만 작동하지 않습니다. NSString이 AES256EncryptWithKey에 응답하지 않을 수도 있다는 경고를 표시합니다. – Rani

+0

두 방법 모두 시도했지만 모두 동일한 경고를 나타냅니다. 그 nsstring 응답하지 않을 수 있습니다 AES256DecryptWithKey – Rani

0

당신이 사용자의 자격 증명을 저장하는 경우, 그것을 할 수있는 가장 좋은 방법은 키 체인 API를 사용하는 것입니다. Apple 사이트의 iOS Secure Coding How-Tos은 시작할 수있는 좋은 장소입니다. 특히 How do I store information securely in the keychain or retrieve the information when needed?을보고 싶습니다.

키 체인 API를 사용하면 사용자의 암호가 올바르게 암호화되고 보호됩니다.

관련 문제