【问题标题】:Mysql sha256 password hashing editing madness!mysql sha256密码散列编辑疯狂!
【发布时间】:2011-08-10 12:18:23
【问题描述】:

我像这样散列我的密码;

 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。

我在做傻事吗?!?

谢谢。

【问题讨论】:

    标签: php mysql pdo hash


    【解决方案1】:

    hash function的原型是:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我在做傻事吗?!?

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

        为确保数据库中的数据正常,请确保您的列是 BINARY 类型,并始终使用 mysql_real_escape_string 将其插入。

        【讨论】:

        • 无论如何我都在使用准备好的语句,并且我没有更改密码,当我去编辑行上的任何内容时,它会自动删除字符。
        • @Version1 您无法在 phpMyAdmin 界面中编辑二进制字符串
        猜你喜欢
        • 1970-01-01
        • 2015-04-12
        • 2019-10-30
        • 2012-03-19
        • 1970-01-01
        • 2013-07-30
        • 2015-07-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多