- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 iOS 应用程序,它使用 Keychain、Security.framework 和 Apple 的 KeychainWrapper 类将用户密码安全地存储在我的应用程序中。
该应用程序允许用户创建帐户。当用户创建帐户时,应用程序需要将用户密码的加密版本发送到我的服务器(POST 请求)。
一切正常,但我遇到的问题是我可以安全地存储和检索数据,但我不知道如何检索我的数据的加密版本。
换句话说,假设用户创建了一个帐户并将密码设置为“hello”。然后,我将应用设置为将其安全地存储在钥匙串(keychain)中。
然后 iOS 对其进行加密并将其存储在钥匙串(keychain)中。为了这个问题,我们假设加密版本是“h235llo”。
现在,当我想将密码发送到我的服务器时,我不想发送“hello”。我想发送“h235llo”(加密字符串)。如何访问加密字符串?
这是我用来访问钥匙串(keychain)的代码:
为了将用户名/密码安全地存储到钥匙串(keychain)中,我这样做:
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"UserLoginData" accessGroup:nil];
[keychain setObject:_username.text forKey:(__bridge id)kSecAttrAccount];
[keychain setObject:_password.text forKey:(__bridge id)kSecValueData];
为了从钥匙串(keychain)中安全地检索用户名/密码,我正在这样做:
NSString *secureUser = [keychain objectForKey:(__bridge id)kSecAttrAccount];
NSString *securePass = [keychain objectForKey:(__bridge id)kSecValueData];
如有任何帮助,我们将不胜感激。
谢谢你抽出时间,丹。
最佳答案
Keychain 的内部加密细节是私有(private)的,可能会发生变化。 (它们不是完全私有(private)的。Apple 做了一个 pretty nice job of explaining them,但应用程序无法访问具体细节。)
我怀疑您对加密(经过加扰后可以恢复原始数据的数据)和散列(经过加扰后原始数据丢失的数据)之间的区别有些困惑).密码验证通常采用散列法,而不是加密法。
您需要的特定类型的散列(或加密)完全取决于您的服务器。您的服务器不可能依赖特定设备上 iOS Keychain 的内部加密状态(如果可以的话,您也不想这样做)。所以问题是,您的服务器希望身份验证请求采用什么格式。
如果您控制服务器,并且您只是在寻找一种无需发送明文密码即可进行身份验证的好方法,那么恭喜您,您考虑得很好。但是,您想要的工具不是加密。它是一个像 PBKDF2 一样的 key 派生函数。您可以在此 Renaissance.io talk 中找到介绍从第 16 分钟开始。或者您可以从 slide 33 开始.
关于ios - 以加密格式获取钥匙串(keychain)密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753382/
我是一名优秀的程序员,十分优秀!