2011-10-03 65 views
3

我正在創建一個應用程序,要求用戶註冊一個遠程服務器,但我想在發送它之前散列它們的密碼以存儲在我的數據庫中。在Android應用程序中散列密碼的一些好方法是什麼?

我嘗試過使用jBCrypt庫,但它在散列時創建了一個漫長的掛起時間。還有其他的選擇嗎?散列密碼的最佳(最安全)方法是什麼,而不會造成明顯的掛起?

+0

爲什麼不使用ssl? –

+0

@ DanielA.White:這不需要我有一個有效的SSL證書嗎?我目前沒有其中之一。 – WilHall

+0

@WilHall更不用說,SSL證書很貴。 –

回答

4

你的方法似乎是錯誤的。除非你有一些特殊的要求,通常的方式做,這是下面的(不是Android的特異性,對於任何Web應用程序):

  1. 當用戶註冊時,把他們的密碼,哈希它(使用隨機鹽也建議使用),並將其保存在數據庫中。這樣做是爲了避免將實際密碼保存在數據庫中。
  2. 當用戶需要登錄時,您將實際密碼發送到您的webapp(使用SSL以避免發送明文),而不是的散列。 在服務器上,應用與步驟1中相同的散列算法,並將結果與​​數據庫中的結果進行比較。如果它們相同,則用戶提供了正確的密碼。

總之,你應該在服務器上做哈希,而不是在Android設備上。

+0

我目前正在做的是: 註冊:獲取密碼輸入,哈希,發送到服務器,存儲它。 登錄:獲取密碼輸入,哈希值,將其發送到服務器,比較它 你是說我應該使用SSL發送純文本密碼,然後將它散列在服務器上?這不需要我的域的SSL證書嗎? – WilHall

+2

是的。請注意,你現在正在做的事情是不安全的:如果有人攔截了流量,他們會得到散列,而不是實際的密碼,但他們並不需要它。只要攻擊者擁有散列,他們就可以在不知道密碼的情況下將其發送到服務器併成功登錄。請使用SSL。 –

0

不惜任何代價避免保存第三方密碼。保存它們被認爲是一種網絡釣魚。嘗試保存認證令牌,而不是使用OAuth等方法獲得的原始密碼。

如果您確實需要將密碼發送到Web服務器上的數據庫,請使用HTTPS。這將確保通過電線進行安全的加密。然後您可以根據需要在數據庫中加密密碼。此方法還可以確保您的加密機制不在設備本身上,而且可能更容易受到危害。

相關問題