我有两个两个文本字段,一个用于用户名和密码:当用户输入用户名和密码并单击“保存”按钮时,用户名和密码正在保存在SQLite数据库中。加密SQLite数据库中的密码?
我想保存为加密格式的用户名和密码以获得更高的安全性。
我有两个两个文本字段,一个用于用户名和密码:当用户输入用户名和密码并单击“保存”按钮时,用户名和密码正在保存在SQLite数据库中。加密SQLite数据库中的密码?
我想保存为加密格式的用户名和密码以获得更高的安全性。
使用此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,然后比较该散列与存储在数据库中的密码字段。
散列不是加密。如果稍后需要将原始密码发送到服务器,这将不起作用... – 2011-11-08 06:08:02
无需获取原始密码。我们只是比较给定密码的哈希值和数据库中的哈希值存储。如果相等,那么给定的密码是正确的。我想补充一点,你应该用_salt_来散列密码。而且,MD5不安全。最好使用SHA-256。 – wannik
我正在定义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]);
如果要存储用户的凭据,做到这一点的最好办法是使用Keychain的API。 Apple网站上的iOS Secure Coding How-Tos是一个很好的开始。特别是你想看看How do I store information securely in the keychain or retrieve the information when needed?。
使用钥匙串API将确保用户的密码被正确加密和保护。
我想你可以使用SecKeyWrapper类。你可以找到它的开发者网站:
你想节省用户名和密码加密?通常它只是加密保存的密码。 – Deco
@Deco雅我想保存加密的用户名和密码 – Rani