2011-06-27 56 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

相關問題