2013-10-08 15 views
-2

我有兩個問題1我有下面的代碼,我不知道如何當用戶註冊如何解碼我的md5加密,以及如何正確調用該功能?

public static final String md5(final String toEncrypt) { 
    try { 
     final MessageDigest digest = MessageDigest.getInstance("md5");    
     digest.update(toEncrypt.getBytes()); 
     final byte[] bytes = digest.digest();  

     final StringBuilder sb = new StringBuilder(); 

     for (int i = 0; i < bytes.length; i++) { 
      sb.append(String.format("%02X", bytes[i])); 
     } 

     return sb.toString().toLowerCase(); 
    } 
    catch (Exception exc) { return ""; // Impossibru! } 
} 

第二個問題是如何加密我的字符串密碼,用它從我的代碼,即另一部分當我將它從我的數據庫中拉出以匹配用戶在編輯框中輸入的內容時,我會解密該字符串嗎?

+3

MD5是** **不加密。 –

+14

MD5是一臺絞肉機。牛進去了,漢堡包出來了。你不能把那個漢堡包粘在一起成牛。你不解碼md5哈希,因爲它不能被解碼。你取用戶的密碼,用md5對其進行哈希處理,然後比較兩個md5哈希值。 –

+0

好吧,那麼我該如何調用這個函數,以便我可以隱藏用戶在框中鍵入的內容並將其與數據庫匹配?在學習Java的過程 – user2030485

回答

8
  1. 你不應該來 「解密」 MD5。哈希函數的全部重點是讓它很難解決它。 (當然,黑客試圖有時成功,但是這是一個不同的主題。)你哈希用戶的輸入,並然後與數據庫中的哈希密碼進行比較。
  2. 調用它,只需使用String hashedPassword = md5("some person's password");。就像一個正常的方法。
  3. 您應該實際上應該做一些異常處理,而不是忽略它們。在至少記錄他們,在最低限度。或者返回null或使用throws子句。只是不要完全忽略它們。
  4. 我甚至不知道發生了什麼事情在第3行...你應該讓那些獨立的線路。另外,你的縮進是有點非常奇怪。你會花費更多的時間來閱讀你的代碼,而不是寫它,所以現在就讓它可讀,你會在以後感謝你的過去。實際上,我已經看到一個bug:

    catch (Exception exc) { return ""; // Impossibru! } 
    

    閉括號被註釋掉了。

1

MD5是一個單向加密方法。找到加密版本是什麼的唯一方式,就是人物的MD5哈希值的組合,直到結果匹配

+0

非常感謝你們,我現在明白了,它的工作原理...謝謝 – user2030485

+0

這就是爲什麼MD5,實際上任何哈希函數,即使使用salting,都不應該用於保護密碼。 – zaph