2013-04-04 55 views
1

在我的Java應用程序開始時,我讓用戶輸入他的用戶名和密碼。這些憑證存儲在一個ConnectionKey對象中,該對象在應用程序對Web服務進行查詢時使用。每個查詢都需要有效的用戶名和密碼。而且,這些查詢在整個應用程序的整個生命週期中都執行。如何在Java中安全地存儲用戶密碼以便在整個應用程序中重複使用

現在我正在將用戶密碼存儲爲ConnectionKey中的一個字符串。我知道這是非常不安全的,我想通過某種加密來使它更安全。但是,我需要能夠檢索原始用戶密碼才能查詢此Web服務。

  • 如何安全地存儲用戶密碼,同時仍然在整個應用程序中使用此密碼?

謝謝!

編輯

ConnectionKey簡直就像一個類,所以:

class ConnectionKey { 

    private final String user; 
    private final String pass; 
    private final String server; 

    public ConnectionKey(String user, String pass, String server) { 
     this.user = user; 
     this.pass = pass; 
     this.server = server; 
    } 

} 
+0

什麼是ConnectionKey? – Vitaly 2013-04-04 22:03:32

+0

我是否正確:ConnectionKey是你的密碼之一(作爲字符串)?當應用程序沒有運行時,你在哪裏存儲密碼?你是否將ConnectionKey存儲在文件中? – GameDroids 2013-04-04 22:06:23

+0

@GameDroids我只需要在運行時存儲密碼 – souldzin 2013-04-04 22:07:16

回答

0

首先,我相信你讀SO Why is char[] preferred over String for passwords? 以下問題,這意味着,如果你有明文口令,至少是其一個char []不字符串

除此之外,以安全地存儲用戶的密碼,則應該與它加密的公知,良好測試(通常單程)的加密算法。

這可能與您詢問的以及您如何使用ConnectionKey相矛盾,但問題很容易加密您的密碼並更改使用密碼的api /方法。例如,如果您要驗證服務器端的ConnectionKey,請更改該方法以使用加密密碼,即對已知密碼使用相同的加密算法,並將其與傳入加密密碼進行比較。

+0

重複的問題,各個環節的意見 – Vitaly 2013-04-04 22:15:10

+0

給予@Vitaly站在我這邊沒有問題,歡呼 – 2013-04-04 22:17:33

+0

我會改變的東西都在服務器端完成的方式,但我無法做到這一點。我將在應用程序開始時只考察一次日誌記錄。如果這是行不通的,我將密碼存儲爲加密的char [],使用前只需解密。謝謝回覆! – souldzin 2013-04-05 14:13:02

相關問題