2012-05-22 149 views
-1

我試圖加密的用戶註冊使用MD5密碼和登錄..我使用MySQL作爲我的數據庫中匹配相同.. Mysql的太提供一個選項,密碼轉換爲MD5(即MD5(密碼))。我想知道這是更好的方法來加密呢..是用java代碼或MySQL查詢吧..提前在Java或MySQL中加密密碼?

感謝。

+0

您也可能要閱讀http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html –

+3

這不是加密:這是MD5哈希。哈希是正確的事情要做,但你需要用正確的名字來稱呼它。 SHA哈希將更安全。 – EJP

回答

3

由於邏輯應用程序和數據庫可以在兩個不同的物理設備存在,它是更安全的選擇,如果你在應用層加密密碼,然後將其移動到數據庫中。

但從你應該考慮的加密,在一個非常早期的水平散列密碼,這樣層與層密碼犯規移動作爲純字符串應用的設計要點。

Offtopic:

MD5是容易collision attack,您會考慮使用像salt追加電子郵件或動態生成的值,以防止Rainbow Table

definitely-safest-password-storage-scheme

10
+0

他沒有存儲密碼。你的觀點? – EJP

+0

匹配密碼,而使用加密密碼登錄意味着他將密碼存儲在MySQL中。這纔是重點。 – AlphaMale

+1

不,重點是他*是*'存儲密碼哈希'。閱讀問題。他錯誤地使用了'加密'這個詞,應該使用SHA而不是MD5,但是否則他正在做你說他應該做的事。 – EJP

2

下面是我用隱窩與MD5.It返回您加密後輸出的算法。

public class CryptWithMD5 { 
    private static MessageDigest md; 

    public static String cryptWithMD5(String pass){ 
    try { 
     md = MessageDigest.getInstance("MD5"); 
     byte[] passBytes = pass.getBytes(); 
     md.reset(); 
     byte[] digested = md.digest(passBytes); 
     StringBuffer sb = new StringBuffer(); 
     for(int i=0;i<digested.length;i++){ 
      sb.append(Integer.toHexString(0xff & digested[i])); 
     } 
     return sb.toString(); 
    } catch (NoSuchAlgorithmException ex) { 
     Logger.getLogger(CryptWithMD5.class.getName()).log(Level.SEVERE, null, ex); 
    } 
     return null; 


    } 
} 

您不能解密MD5,但你可以比較輸出,因爲如果你把相同的字符串在這個方法中,將返回相同的加密後output.If要解密你需要使用SHA.You永遠使用decription爲用戶password.For那總是使用MD5.That例外是相當冗餘的,它永遠不會扔它。將密碼添加到數據庫時,會添加此方法返回的內容。要進行登錄,請將它們進行比較。