2011-06-27 52 views
3

我想在我正在开发的iPhone应用程序中添加简单的密码保护。我可能会使用crypt()将密码存储在CoreData/sqlite格式的数据库中。如何在iPhone应用程序中实现密码恢复?

我觉得我对如何创建和存储密码相当好理解,但如果用户忘记了密码,我想加一个密码恢复能力

这是我的一部分m在iOS中挣扎。我希望一切都是本地的,所以我想不出一种使用链接重置密码的方法。

我曾想过发送密码的电子邮件,但在iOS中,没有持有该设备的人看到电子邮件内容的情况下无法发送电子邮件。

我能想到的唯一方法是拥有一个或两个“备份密码”,这基本上是用户选择问题的答案(或者甚至只是存储提示问题以及密码)。

虽然在我的应用程序中受保护的数据并不那么重要,但它们都不是那么安全,所以我没有寻找最强大的解决方案(只是一个体面的解决方案,不是太难实施,不是对用户来说太不方便了,而且黑客不会太难打破)。

建议非常感谢。

谢谢你,罗恩

+0

你在哪里存储明文密码?为什么需要通过电子邮件发送? – robert

+0

我强烈建议不要使用安全问题。这些已被证明不安全。 此外,如果您要保护数据,请不要忘记加密它(当然,使用从用户密码导出的密钥),否则密码保护不起作用。它可能会给恢复密码的能力带来一些问题。 – Artium

+0

@Artium ...感谢您的提示!安全对我的应用程序来说不是非常重要。它基本上是一个学习应用程序,不同的用户可以为对方准备“测试”。我只是想确保学生作弊不是“超级容易”,所以我想要一个非常基本的密码保护方案。如果学生真的想作弊,有很多方法可以做到这一点......我只是想让它变得更难一些。 – Ron

回答

5

而是恢复密码的,可以提示重置使用设置,当他们最初创建账户条件的密码 - 如母亲的娘家姓,-4等。这样,您不必担心解密密码或将其发送给用户。一旦他们正确回答足够的安全问题,系统会提示他们重置密码。您可以存储本地加密的数据。您永远不需要向用户发送密码。

+0

Experian.com使用此模型。 –

+0

感谢您的回复!这似乎是一个合理的方法(特别是因为我不是那种关于安全的偏执)。 – Ron

1

最简单的方法可能是选择“密码保护”并显示警告(“如果您忘记了密码,数据可能无法恢复!”)。

这不会是那么安全:数据是可能将出现未加密的电话备份,除非您自己加密。结果是确定的用户可以要求你的帮助,你可以写一个工具,通过未加密的备份挖掘并重置密码。

避免内置crypt(),这可能是基于DES的并且限制为8个ASCII字符。在钥匙串中存储明文密码也不是糟糕的选项。

+0

感谢您的咨询!你有建议避开crypt()的理由吗?是因为出口限制还是其他原因(我认为地下室可以安全地使用......特别是在加密密码而不是数据时)。我可能不会仅仅存储纯文本,但我可以只做一些简单的操作而不是crypt()。 – Ron

+0

我在答案中说过:传统的基于DES的crypt()是严重缺陷的,主要的是它的输入被限制为8个ASCII字符和一个12位盐。 OS X似乎没有改进的'crypt()'。 bcrypt是体面的(但使用提供的bcrypt_gen_salt函数;您可能需要调整它以调用SecRandomCopyBytes()左右):http://codahale.com/how-to-safely-store-a-password/ –

+0

感谢您的澄清和链接。这是一个有趣的阅读! – Ron

相关问题