[英]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.