2012-08-24 107 views
1

我正在嘗試創建一個應用程序,用戶必須使用名稱/傳遞組合登錄。但是,我不完全確定在哪裏檢查用戶名/密碼是否有效。實現在Android中登錄

每次運行應用程序時,我應該在顯示登錄屏幕之前刷新手機上的數據庫副本嗎?或者我應該只在我驗證了登錄信息(通過https發送的帖子)之後才能拉取。

另外我想知道在手機上存儲包含用戶名/密碼組合的數據庫的一部分的安全性。如果我用鹽重複散列密碼,是否有機會輕鬆查看用戶名/密碼組合?什麼散列算法是適當的? (md5很弱我讀過,和sha-1一樣,但是可能反覆迭代可以減輕sha-1的弱點?)。

回答

0

在更新數據庫之前驗證登錄信息(通過某種HTTP方法)。如果您將任何憑證存儲在手機的數據庫中,那麼沒有登錄名的人可以使用手機訪問您的數據。即使你對這些值進行哈希處理,擁有紮根手機的人也可以改變數據庫中的內容等。

帶鹽的SHA-2是安全性的好選擇。

+0

帶好鹽的SHA-2不會對字典附加或暴力攻擊產生任何幫助:http://codahale.com/how-to-safely-store-a-password/ – Luke

+0

我不得不同意bcrypt對於安全性更好,但是如果使用HTTP方法,那麼您仍然容易受到中間人和重放攻擊的攻擊。所有這些都將取決於您的場景以及您需要多少安全 – bennettaur

+1

是的,沒有參數,SSL/TLS是安全傳輸密碼的必備條件。 – Luke

0

如果您在用戶使用登錄前後更新數據庫取決於您的應用程序概念。我猜想提供的數據僅適用於擁有有效登錄名的用戶,因此您只應在登錄後加載/更新數據庫。否則,用戶可以下載你的應用程序,下載數據庫,並獲得所提供的數據可能是微妙的(我不知道里面存儲什麼,所以你必須決定)

爲什麼要保存用戶數據(登錄)在通電話?這隻有在您的應用程序沒有互聯網運行時纔有意義,但這意味着您的應用程序必須在每部手機上存儲所有用戶的登錄數據。這是一個可怕的想法。

您可以使用SHA-2作爲密碼,但在大多數情況下使用鹽漬md5應該仍然可用。

+0

我被困在使用一些第三方API管理數據,我有很多要了解它們。 – aamit915

0

我在幾天前完成了這個過程。你有2個選擇。 REST風格的服務或通過json。

我送經httppost一個JSON,然後散列密碼,並在PHP(服務器端)認證

的問題是,當你發送JSON您發送純文本。這有一些技巧。你可以在Android應用上散列你的密碼,並改變你的網站/數據庫的整個邏輯來處理你選擇的散列或通過https post。我會建議後者。要看什麼是你

+1

加密!=散列我認爲你混淆了它或者你真的想要加密密碼? – 2012-08-24 18:46:34

+0

是的你是對的。我匆匆打字。表示哈希。 – MayTheSchwartzBeWithYou

0

對於你的問題的密碼存儲部分簡單:

  • 不要只是哈希密碼並儲存起來。
  • 不要只是在那裏扔鹽,散列和存儲。
  • 請使用經過認證的算法,其他人已經審覈了安全性以保護您的用戶密碼。

這樣的例子是bcrypt,它基於Blowfish和PBKDF2,它基於SHA-256等哈希算法。

這個問題在security.stackexchange處。com涵蓋了這兩者的所有相關細節及其權衡。

Do any security experts recommend bcrypt for password storage?

您還可以受益於閱讀How to safely store a password