我試圖加密的用戶註冊使用MD5密碼和登錄..我使用MySQL作爲我的數據庫中匹配相同.. Mysql的太提供一個選項,密碼轉換爲MD5(即MD5(密碼))。我想知道這是更好的方法來加密呢..是用java代碼或MySQL查詢吧..提前在Java或MySQL中加密密碼?
感謝。
我試圖加密的用戶註冊使用MD5密碼和登錄..我使用MySQL作爲我的數據庫中匹配相同.. Mysql的太提供一個選項,密碼轉換爲MD5(即MD5(密碼))。我想知道這是更好的方法來加密呢..是用java代碼或MySQL查詢吧..提前在Java或MySQL中加密密碼?
感謝。
由於邏輯應用程序和數據庫可以在兩個不同的物理設備存在,它是更安全的選擇,如果你在應用層加密密碼,然後將其移動到數據庫中。
但從你應該考慮的加密,在一個非常早期的水平散列密碼,這樣層與層密碼犯規移動作爲純字符串應用的設計要點。
Offtopic:
MD5是容易collision attack,您會考慮使用像salt追加電子郵件或動態生成的值,以防止Rainbow Table。
不存儲密碼。如果它曾經坐在磁盤上,則可能是 被盜。相反,存儲密碼哈希。使用正確的hashing algorithm,像SHA256,BCrypt或Salt散列。
下面是一些有用的鏈接,你必須看到:
希望這有助於。
下面是我用隱窩與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例外是相當冗餘的,它永遠不會扔它。將密碼添加到數據庫時,會添加此方法返回的內容。要進行登錄,請將它們進行比較。
您也可能要閱讀http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html –
這不是加密:這是MD5哈希。哈希是正確的事情要做,但你需要用正確的名字來稱呼它。 SHA哈希將更安全。 – EJP