2016-08-08 65 views
0

我試圖創建我的第一個登錄頁面作爲學習練習。簡單的用戶名和密碼驗證java

我的計劃是預先使用用戶名的鹽散列密碼,例如。將其存儲在文本文件中,然後當用戶登錄時,我將使用相同的鹽散列密碼並將結果與​​文本文件進行比較。

我是一個完整的初學者與安全等,所以我不知道這是否安全或不?小應用程序的規範是什麼?如果不推薦這種方法,那麼什麼是合適的簡單替代方案?

編輯一個可能的解決方案,如果我能得到它的工作。

String unpwfield; 
    unpwfield = userId.getText()+passwordfield.getText(); 
    if (BCrypt.checkpw(unpwfield, passwordhash)) 
     System.out.println("It matches"); 
    else 
     System.out.println(userId.getText()+passwordfield.getText()); 
+0

這聽起來不錯,對許多應用程序來說都是一個標準。只要確定你使用了安全的哈希算法。通常,這些信息將寫入數據庫。 –

+0

我打算讓用戶在這裏創建一個文件http://aes.online-domain-tools.com/ 並要求他們使用該密鑰作爲用戶名。這是一個安全漏洞,知道關鍵是用戶名嗎? –

+0

@ user1274820請參閱[tag:password-encryption]標籤wiki和[此答案](http://stackoverflow.com/questions/2283937/how-should-i-ethically-approach-user-password-storage-for -later-plaintext-retrieve/2287672#2287672)爲什麼這是一個可怕的想法。 – EJP

回答

1

對於密碼存儲,你會想用哈希算法。密碼哈希速度太快,並且在離線密碼猜測時不會放慢攻擊者的速度。例如,bcrypt通常是最適合使用的算法。

Bcrypt生成自己的鹽,所以你不需要擔心一個安全的方式來生成它們。

我會避免使用用戶名作爲鹽。如果使用多次,鹽將避免使用相同的字節表示存儲相同的密碼。

原因是,如果用戶重複使用相同的密碼,那麼任何攻擊者都能立即看到密碼哈希數據。另外,如果您的系統是公開可用的,則您的應用程序的每個實例都將以admin用戶的哈希值完全相同的方式進行存儲,這意味着攻擊者將能夠以admin作爲鹽預先創建彩虹表。

有關更多信息和指導,請參閱OWASP Cheat Sheet on Password Storage

+0

我已經開始考慮Bcrypt,並且我想將用戶名和密碼一起傳遞給隨機鹽。你知道這是可能的嗎?當我嘗試時,我得到一個空指針。見編輯.. –

+0

Bcrypt生成自己的鹽,你不需要通過自己的鹽,這樣做沒有好處。 – SilverlightFox

+0

我不知道如何處理檢查用戶名和密碼都是正確的,所以我想我可以在創建哈希之前將它們結合在一起。然後當我想比較它們時,我只是將兩個字符串加在一起並進行比較。 –