【问题标题】:Encrypt passwords in SQLite database?在 SQLite 数据库中加密密码?
【发布时间】:2011-11-08 05:25:09
【问题描述】:

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

我想以加密格式保存到用户名和密码以提高安全性。

【问题讨论】:

  • 您想同时保存用户名和密码吗?通常只是加密保存的密码。
  • @Deco ya 我想把用户名和密码都加密保存

标签: iphone sqlite encryption


【解决方案1】:

我正在定义两种加密和解密字符串的方法,选择你喜欢的简单方法。

方式 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] );

【讨论】:

  • 方式 2:key 只是一个 nsstring,你可以随意命名它
  • 我尝试了方法 2,但它不起作用它警告我 NSString 可能无法响应 AES256EncryptWithKey
  • 我尝试了这两种方法,但都给出了相同的警告,即 nsstring 可能无法响应 AES256DecryptWithKey
  • 好吧..让我看看另一种方法来解决你的问题,当我得到完美的我会发布它,如果你得到完美的,你也会在这里发布.谢谢拉尼。
【解决方案2】:

使用此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]
    ];

在检索时,您还必须先将字符串转换为 MD5,然后将该哈希值与存储在数据库中的密码字段进行比较。

【讨论】:

  • 散列不是加密。如果稍后需要将原始密码发送到服务器,这将不起作用...
  • 无需获取原始密码。我们只是比较给定密码的哈希值和数据库中存储的哈希值。如果相等,那么给定的密码是正确的。我想补充一点,您应该使用 salt 对密码进行哈希处理。此外,MD5 并不安全。最好使用 SHA-256。
【解决方案3】:

如果您要存储用户的凭据,最好的方法是使用 Keychain API。 Apple 网站上的iOS Secure Coding How-Tos 是一个很好的起点。特别想看看How do I store information securely in the keychain or retrieve the information when needed?

使用 Keychain API 将确保用户的密码得到适当的加密和保护。

【讨论】:

    【解决方案4】:

    我认为你可以使用 SecKeyWrapper 类。您可以在开发者网站上找到它:

    http://developer.apple.com/library/ios/#samplecode/CryptoExercise/Listings/Classes_SecKeyWrapper_h.html

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2012-01-22
      • 2014-08-25
      相关资源
      最近更新 更多