【问题标题】:encode password objective-c mac编码密码objective-c mac
【发布时间】:2012-10-24 07:01:36
【问题描述】:

如何在 Mac 上对密码字符串进行编码并将其保存到 Objective-c 中的文件中? 像这样:

NSString *myPasswordString = [NSString stringWithFormat:@"mypassword"];

//Encode

//Save to Preferences file

【问题讨论】:

  • 您可能想要加密密码,而不是对其进行编码(加密无法反转,编码可以)。我想最好的选择是使用bcrypt C 库。
  • @Joost 是 bcrypt 用于objective-c mac cocoa 吗?
  • @Joost:加密可以反转;散列不能。
  • 你想完成什么?如果您以后需要找回密码,请使用钥匙串。如果您只需要检查是否有人输入正确,请使用为其设计的盐渍哈希,例如 PBKDF2、bcrypt 或 scrypt。

标签: objective-c macos encryption nsstring passwords


【解决方案1】:

存储密码的更好方法是使用钥匙串。

有一些类可以让它变得更容易——比如 Github 上的SSKeyChain

【讨论】:

  • SSKeychain 有它的缺陷。在当前版本下,它会从底层 Sec 框架产生一个无效的用户名响应,并且基本上会与任何启用断点的项目搞砸。
【解决方案2】:
#import <CommonCrypto/CommonDigest.h>
...
const char *cStr = [myPasswordString UTF8String];
unsigned char result[16];
CC_MD5( cStr, strlen(cStr), result ); // This is the md5 call
NSString *passwordAfterEncrypt = [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,您无法解码。您可以对用户输入的密码进行编码,并比较两个编码后的密码,看看用户是否输入了正确的密码。
【解决方案3】:

您可以按如下方式写入首选项文件:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[settings setObject : myPasswordString forKey : @"mypassword"];
[settings synchronize];

我不确定你所说的“编码”是什么意思。如果您的意思是“加密”,那么关于 SO 有很多问题:

即使有上述情况,您仍然需要仔细考虑安全隐患。如果您存储的密码是使用嵌入在您的应用程序中的密钥加密的,那么攻击者可能会恢复该密码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多