2013-03-30 71 views
-1

因此,我使用md5在用戶註冊和登錄時對密碼進行編碼和解碼,但是我的數據庫中的密碼與登錄時使用的密碼不匹配,即使我知道它們是相同的單詞:PHP MD5無法正常工作

這就是我的數據庫

098f6bcd4621d373cade4e832

這是用在登錄屏幕上使用的密碼MD5給我帶來

098f6bcd4621d373cade4e832627b4f6

正如你可以看到有7個額外的字符,但我不明白他們爲什麼不相同。下面是用於插入用戶的詳細信息到數據庫上註冊

腳本,這裏是如何我的登錄表單中的值

$qry="SELECT * FROM Members WHERE login='$login' AND passwd='".md5($_POST['password'])."'"; 
$result=mysql_query($qry); 

比較在另一方面,我目前在過程從mysql轉移到mysqli,所以原諒mysql的使用,因爲我知道它的棄用。

+0

什麼是數據庫中密碼字段的SQL數據類型?它是否是'VARCHAR(25)'的機會? – Boaz

+0

是的,它是一個varchar(25),我正在使用排序規則utf8_unicode_ci。請告訴我,這意味着你知道如何解決它:-) – Chris

+0

該領域有多長?請記住,對於至少六年或七年的密碼,md5並不安全(更長?)。你應該在BLOWFISH中使用'crypt()'。 –

回答

3

默認情況下,MD5()函數生成的散列長度爲32個字符。 passwd列的數據類型當前爲VARCHAR (25),這意味着它最多隻能存儲25個字符,比實際值少7個字符。

要解決此問題,您需要更改passwd列的數據類型,以便能夠存儲正確的長度,例如, VARCHAR (32)