【问题标题】:iOS: Storing Non-User passwordiOS:存储非用户密码
【发布时间】:2014-10-03 21:03:57
【问题描述】:

我需要在我的 iOS 应用程序中存储第三方用户名/密码,最好和最安全的方法是什么?当我的应用程序首次运行时,它需要与 Google 的 Picasa 对话以下载私有图片以用于该应用程序。要与 Picasa 交谈,我必须提供我的用户名/密码,并且存储在代码中根本不安全。

我在网上搜索过,我看到Keychain 出现了很多,但我究竟如何将我的密码预加载到keychain 中?

xCode 中是否有配置文件来存储 Web 服务所需的密码?

谢谢

【问题讨论】:

  • 你可以使用 Google+ 登录课程吗?似乎已经与 KeyChain 进行了某种集成。 developers.google.com/+/mobile/ios/api/…
  • 您所指的单点登录是用户凭据。用户运行iphone应用时,手机需要获取开发者/管理员的凭证才能下载图片。

标签: ios objective-c encryption passwords


【解决方案1】:

这是对上面krzysztof的回应:

我在这里遇到了第 22 条问题,因为我似乎无法理解将密码作为参数提供给另一个函数的概念。除了避免其他人以纯文本形式阅读源代码外,黑客就不能获取二进制文件并逆向工程来读取源代码中的密码(本例中为R1和R2)???

回到加密,让我们看下面这行加密/解密数据的代码:

NSData *encryptedImage = [RNEncryptor encryptData:imageData withSettings:kRNCryptorAES256Settings password:@"A_SECRET_PASSWORD" error:nil];


NSData *decryptedData = [RNDecryptor decryptData:data withSettings:kRNCryptorAES256Settings password:@"A_SECRET_PASSWORD" error:nil];

这就是我卡住的地方...我在哪里存储A_SECRET_PASSWORD

【讨论】:

  • 您将其存储在代码中,但您希望它不容易被对您的代码进行逆向工程的人找到。
【解决方案2】:

认为您需要以加密形式存储密码。选择一些加密算法,生成加密细节。并且在代码中有一些方法可以在需要时对其进行解密。

您只是不希望以纯文本形式阅读您的代码的人看到密码。

认为将密码拆分成单独的字符串然后再加入它们就足够了。

这里例如你已经在代码“My1Password”中加密:

#define R1        @"My" 

#define R2        @"Password"

+ (NSString *)generatePass{ return [NSString stringWithFormat:@"%@%@%@, R1, @(1), R2]; }

【讨论】:

  • 恐怕你会建议这个解决方案。其他开发语言有特殊的配置文件,其他人看不到,为什么xCode不能这样做?
  • 不知道这些文件,也不认为 xCode 有它们。听起来它可能非常有用,因为所有应用程序都有某种与 Web 服务的连接。可能有一些我不知道的库或 xcode 插件,我的解决方案是最快实现的。
  • 其他人是否有可能掌握二进制包并使用工具“逆向工程”并阅读源代码?如果可能的话,他们可以以纯文本形式读取密码。请参阅下面的帖子。
  • 是的,我认为逆向工程代码总是可能的。在android上你会使用混淆器,我猜混淆也是ios构建的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 2013-09-08
  • 1970-01-01
  • 2011-10-21
  • 2010-12-27
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多