【问题标题】:What is the best practice to store username and password on the iPhone?在 iPhone 上存储用户名和密码的最佳做法是什么?
【发布时间】:2026-02-23 01:00:01
【问题描述】:

是否有在 iPhone 上存储用户名和密码的最佳做法?我正在寻找明显安全但也会在应用更新之间保留信息的东西。

【问题讨论】:

    标签: iphone objective-c security passwords


    【解决方案1】:

    使用 Apple 钥匙串。

    + (NSString *) getPasswordForUsername: (NSString *) username andServiceName: (NSString *) serviceName error: (NSError **) error;
    
    + (void) storeUsername: (NSString *) username andPassword: (NSString *) password forServiceName: (NSString *) serviceName updateExisting: (BOOL) updateExisting error: (NSError **) error;
    

    第一种方法允许你请求 与某个关联的密码 特定的现有用户名 服务名称(我刚刚使用 我的应用程序的名称作为服务名称)。这 第二个允许您存储一个 用户名/密码/服务名称组合, 并允许您指定是否 不是合适的钥匙串项目 应使用提供的更新 如果找到现有的密码 匹配用户名和服务 名称对。每个的最后一个参数 是对 NSError 对象的引用 这将包含较低级别的错误 出现问题时的信息 (如果不是,则为 nil)。

    欲了解更多信息,请参阅his blog

    【讨论】:

    • 返回的密码是明文吗?
    • 当我将该类添加到我的项目中时,我得到了一堆奇怪的错误,例如“_kSecAttrAccount”,引用自:SFHFKeychainUtils.o 中的_kSecAttrAccount$non_lazy_ptr “_SecItemDelete”,引用自:+ [SFHFKeychainUtils deleteItemForUsername :andServiceName:error:] in SFHFKeychainUtils.o "_kSecReturnAttributes",引用自:_kSecReturnAttributes$non_lazy_ptr in SFHFKeychainUtils.o "_kSecClass",引用自:_kSecClass$non_lazy_ptr in SFHFKeychainUtils.o "_kSecClassGenericPassword",引用自:_kSecClassGenericPassword$U_lazy_ptr in .o
    • 存储用户名值的最佳做法是什么?有没有办法找到任何用户名,只给出服务名称?
    【解决方案2】:

    keychain 是您正在寻找的。​​p>

    【讨论】:

    【解决方案3】:

    使用钥匙串,这里是some code,让它变得非常简单。适用于设备和模拟器。

    【讨论】:

      【解决方案4】:

      请参阅Generic Keychain 示例源。恕我直言,这就是要走的路

      【讨论】:

        最近更新 更多