2012-07-18 68 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);