2011-11-08 299 views
1

我有两个两个文本字段,一个用于用户名和密码:当用户输入用户名和密码并单击“保存”按钮时,用户名和密码正在保存在SQLite数据库中。加密SQLite数据库中的密码?

我想保存为加密格式的用户名和密码以获得更高的安全性。

+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] 
    ]; 

虽然也获取u必须首先将字符串转换为MD5,然后比较该散列与存储在数据库中的密码字段。

+0

散列不是加密。如果稍后需要将原始密码发送到服务器,这将不起作用... – 2011-11-08 06:08:02

+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]; 
} 

方式2

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

在方式2:钥匙只是一个nsstring你可以命名它无论你喜欢 –

+0

我试过方式2,但它不工作它给了我警告NSString可能不会响应AES256EncryptWithKey – Rani

+0

我试了两种方法,但都给出了相同的警告那nsstring可能不会响应AES256DecryptWithKey – Rani