2015-01-09 195 views
-1

在我的應用程序中,只有通過授權用戶輸入密碼才允許執行一些操作。所以我需要在文件中存儲加密密碼,然後在需要時讀取加密密碼並將其與輸入的密碼進行比較。我從來沒有做過類似的事情,我需要最簡單的方法來做到這一點。在這裏我找到了this教程,但後來我發現最好不要使用sun.misc.BASE64Decoder/Encoder。你能幫我嗎?Java:如何在文件中寫入/讀取加密密碼

+1

您可以將加密的密碼存儲在屬性文件中 –

+0

Base64不會真正加密任何內容。您可能想要使用散列,如SHA1或SHA256。 – fge

+0

@NamanGala什麼是屬性文件?如何使用它? –

回答

3

不是存儲密碼的,你可以存儲它的哈希值。爲了比較它與另一個密碼,你應該比較哈希,而不是真正的密碼。最簡單的方法,使哈希(鹽)將使用MessageDigest

public byte[] makeDigest(String value, byte[] salt) throws NoSuchAlgorithmException { 
    MessageDigest md = MessageDigest.getInstance("SHA-256"); 
    md.update(salt); 
    return md.digest(value.getBytes()); 
} 

您可以在文件中的密碼,然後商店生成的字節數組(鹽)的摘要。然後使用此方法(和原始鹽)從第二個密碼中進行摘要。最後只是比較兩個字節數組與Arrays.equals

+2

完全同意。這樣你可以跳過解碼! – wassgren

+0

這似乎是非常有用和好的。我會馬上進行試驗。一個問題:你能告訴我爲什麼使用sun.misc.BASE64Decoder/Encoder不好? –

+2

原因之一是[this](http://stackoverflow.com/questions/2267036/work-sun-misc-base64encoder-decoder-for-getting-byte)。另一個問題是,如果你能解密一個密碼,這根本就不安全。密碼加密應該是單向的。 – wassgren

2

我認爲你也可以: 1. salt + hash(例如:sha256)密碼在存儲之前,也保存鹽。隨機生成的鹽更好。 2.使用保存的salt +重新輸入用戶輸入的密碼。 3.簡單地比較它們。如果它們匹配,則可以訪問用戶