2012-07-18 63 views
8

我試圖建立一個登錄系統,但我解決不了一個問題: PHP是給我用MD5的其它輸出();比MySQL ...PHP的md5()給出了不同的輸出那麼MySQL MD5

例如,在PHP:

$password = md5("brickmasterj"); 
return $password; 

返回:

3aa7b18f304e2e2a088cfd197351cfa8 

但MySQL的相當於給了我一個較短的版本:

3aa7b18f304e2e2a08 

有什麼問題?在檢查密碼時如何處理這個問題?

+0

你插入/更新或選擇MySQL的MD5輸出調用使用PHP?我有一種感覺,這是由於你的Column只有18個字符的寬度/大小。 – Gavin 2012-07-18 11:56:41

回答

8

我想在你的表列的長度問題,請將密碼字段的長度至少32

+0

正確的,你可以看到,從MySQL中值是PHP生成的字符串的開頭,也這是18個字符長:) – mishu 2012-07-18 11:57:12

+0

謝謝,這就是問題所在,那裏柱長度最大爲。 – Jers 2012-07-18 11:59:16

2

沒辦法的MySQL返回< 32的長度的,如果你會做一個簡單的查詢像SELECT md5('brickmasterj'),你會看到。現在,您很可能將該值插入到不夠寬的列中。

2

是您的數據庫字段長32個字符?你使用mysql的md5寫入數據庫嗎?

+0

謝謝,這就是問題所在,那裏柱長=> -1 ....最大的感謝方式,通過了!你是如此親。 – kinaesthesia 2012-07-18 12:06:13

0

散列大小,如果始終是固定的。在你的情況下,散列大小是128位。當轉換爲ascii字符串時,它將是一個只包含十六進制數字的32個字符的字符串。 所以如果你存儲變的字符長度應爲ATLEAST 32 例如:password varchar(32) 應該在MySQL的表,那麼你可以使用 select password from table where password =md5($password);