簡體   English   中英

MD5消息摘要Java

[英]MD5 Message Digest Java

我正在嘗試將兩個字符串從字符串列表轉換為MD5消息摘要。

我的字符串列表稱為“用戶名密碼”。

try {
            MessageDigest mdg = MessageDigest.getInstance("MD5");      

            mdg.update(usernamepassword.get(0).getBytes(), 0, usernamepassword.get(0).length());
            mdg.update(usernamepassword.get(1).getBytes(), 1, usernamepassword.get(0).length());     


        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(UPCheck.class.getName()).log(Level.SEVERE, null, ex);
        }

我的問題是-

答:那是正確的方法嗎? B:如何返回它,以便可以在另一個類中使用每個單獨的MD5哈希?

答:那是正確的方法嗎?

否,原因有四個:

1)您使用的是默認字符編碼,而不是指定特定的編碼。 我建議使用UTF-8。

2)您目前正在使用字符串的長度(以字符單位)來指定要使用的字節數

3)如果您想要單獨的摘要(每個字符串一個),則應為每個摘要使用單獨的MessageDigest實例, 或者MessageDigest調用之間進行調用reset

4)目前,您實際上並未對摘要進行任何操作。

我建議您將“采用特定編碼的字符串的MD5”提取到單獨的方法中:

public static byte[] getMd5OfUtf8(String text) {
    try {
        MessageDigest digest = MessageDigest.getInstance("MD5");      
        return digest.digest(text.getBytes("UTF-8"));
    } catch (NoSuchAlgorithmException ex) {
        throw new RuntimeException("No MD5 implementation? Really?");
    } catch (UnsupportedEncodingException ex) {
        throw new RuntimeException("No UTF-8 encoding? Really?");
    }
}

然后,您可以為感興趣的每個列表元素調用它-尚不清楚以后您打算如何處理摘要,但是您可能希望分別將它們...

編輯:正如評論中指出的那樣,如今,MD5確實不是一個很好的哈希選擇。 像SHA-256這樣的鹽會更好 ,但是對於真正的安全應用程序,您可能應該閱讀有關該主題的一些現代文獻。 (我不是專家,所以不想聽起來過於權威。)

使用來自Apache Commons的DigestUtils類。 幾種實用程序方法將幫助您計算/顯示md5或其他一些常見的哈希函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM