簡體   English   中英

MD5哈希返回的輸出與預期不同

[英]MD5 Hashing returning different output than expected

我正在使用JDBC連接燈,並且在MySQL數據庫中使用MD5哈希了單詞LondonWeight作為密碼。 然后,我需要對照集合(即LondonWeight)檢查輸入的密碼,以檢查它們是否匹配。 但是,我的Java代碼中的哈希返回該單詞的不同輸出。

MySQL哈希:1274d1c52d7a5a9125bd64f1f9a26dce

Java哈希:132310771724320562704545645352563257040366

這是我的哈希碼:

private String hashPass(String pass) throws NoSuchAlgorithmException {
    MessageDigest mdEnc = MessageDigest.getInstance("MD5"); 
    mdEnc.update(pass.getBytes(), 0, pass.length());
    String md5 = new BigInteger(1, mdEnc.digest()).toString(8); // Encrypted 
    return md5;
}

當我將其打印到終端時,它肯定會散列在文本框中輸入的字符串,以便我檢查。 知道為什么它會給出不同的輸出嗎? 我了解有其他方法可以散列字節或其他內容嗎?

您目前正在使用Java將哈希轉換為八進制,而將MySQL版本轉換為十六進制。

這是第一個問題,但是:

  • 您的MySQL散列似乎是33個字符,對於以十六進制表示的MD5散列來說,這是太多數據。 那里發生了奇怪的事情。
  • 無論如何,我不會使用BigInteger將字節數組轉換為十六進制。 那不是它的目的。 使用Apache Commons Codec或為十六進制轉換而設計的東西。 例如,這樣,您將獲得BigInteger可能會抑制的適當的前導零
  • 您當前的代碼假定每個字符一個字節
  • 您當前的代碼假定默認字符編碼是合適的; 我建議始終String.getBytes指定編碼
  • 使用MD5進行密碼哈希比較弱。 如果可能的話,更新為更合適的哈希

暫無
暫無

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

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