2011-04-21 130 views
0

我哈哈我的密码像这样;Mysql sha256密码哈希编辑疯狂!

hash('sha256', $_POST['password'], date('y/m/d')) 

现在说一个'aaa'的密码就这样进入我的mysql表;

˜4‡mÏ°\±g¥ÂIS륌JÈ›ßWò/ ¯~èð 

现在,当我去到该行上编辑任何东西,它会忽略一些字符,并更改为沿线的东西;

˜4‡mÏ°\±g¥ÂIS륌JÈ› 

我已经尝试更改mysql连接,数据库,表和个别行的所有unicode设置。我正在使用PDO和InnoDB。

我在做一些事情吗?!?

谢谢。

回答

2

hash function的原型是:

string hash (string $algo , string $data [, bool $raw_output = false ]) 

你传递date('y/m/d')作为第三个参数,导致二进制输出,作为字符串被解释为true

您可能需要十六进制输出。你应该放弃第三个参数。您可能想以某种方式将日期集成到该字段中,这需要连接。

+0

好酷,谢谢,不知道这一点。 – Version1 2011-04-21 18:33:23

0

确保您的列有一个二进制类型,或你的哈希在你的数据库插入之前转换为十六进制字符串(bin2hex(hash('sha256', …, …));

0

我是不是愚蠢?!?

是的。您不应该在phpMyAdmin中手动编辑一组字节。这不是一个字符串,你知道。

为确保数据在DB中正常,请确保您的列是BINARY类型的,并且始终使用mysql_real_escape_string将其转义。

+0

我正在使用预处理语句,而且我不更改密码,当我去编辑行中的任何内容时,它会自动删除字符。 – Version1 2011-04-21 18:31:52

+0

@ Version1你不能编辑phpMyAdmin界面中的二进制字符串 – 2011-04-21 20:03:49