2015-10-08 36 views
0

我們爲學校項目製作了一個系統,我們的教授告訴我們不要在數據庫中以純文本形式存儲密碼。她希望我們加密這些密碼的安全性,因爲我們的系統將處理大量的機密數據。所以我們決定使用MD5來做密碼散列問題是我沒有真正知道我們將如何在登錄過程中實現它。用於密碼的MD5消息摘要在Java中的實現

+2

無論如何,「很多機密數據」對MD5來說看起來不太合適;而且......你到目前爲止做了什麼? –

+0

這是一個學校項目,我們知道還有其他更好的選擇。看來這是最簡單的方法。 – rosep

回答

0

歡迎來到SO。我認爲那裏有一篇類似於你的文章已經得到了回答,但我會告訴你我是如何解決它的。

private String encryptPassword(String password) throws NoSuchAlgorithmException{ 

    MessageDigest md = MessageDigest.getInstance("MD5"); 
    md.update(password.getBytes()); 
    byte[] digest = md.digest(); 
    StringBuilder stringBuilder = new StringBuilder(); 
    for (byte b : digest) { 
     stringBuilder.append(String.format("%02x", b & 0xff)); 
    } 

    return stringBuilder.toString(); 
} 

正如你可以看到上面的方法,我是如何加密通過參數傳遞的字符串的密碼。 MD5是一種單向加密,因此您無法使用Java解密它,但有一些工具。

因此,您應該做的是在用戶註冊時(假設您可以在系統中添加用戶)轉換密碼,然後將轉換後的值作爲字符串(varchar或text)存儲在數據庫中。然後,當你想登錄時再次使用相同的方法,然後將結果與數據庫中的任何密碼進行比較。這些世代不是隨機的,所以如果你輸入像「123」那樣生成的哈希每次都是一樣的。

+1

這就是我問這個問題時的意思!我無法弄清楚如何去做的邏輯。這是高度讚賞。 – rosep

+0

請注意,MD5被廣泛認爲是不安全的。 – jtothebee