gpt4 book ai didi

php - mysql unhex() 不能在 linux 服务器上运行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:21 25 4
gpt4 key购买 nike

我使用以下代码将用户密码存储到 mysql 表中,密码列为 BINARY(20) 类型:

$salted_hash = sha1($salt . $password);
$sql = sprintf("INSERT INTO foo(user, password) VALUES ('guest', UNHEX('%s'))", $salted_hash);

匹配密码的选择查询如下所示:

$salted_hash = sha1($salt . $password);
$sql = sprintf("SELECT `userID` FROM `foo` WHERE `user`='guest' AND `password`=UNHEX('%s')", $salted_hash);

当我连接到在 Windows 或 Mac 机器上运行的网络服务器时,代码工作正常。但是,我的生产 Web 主机是一台 Linux 机器,SELECT 在那里失败了。

我只能将 phpMyAdmin 连接到我的网络主机(mhpMyAdmin 版本 3.4.7.1)。通过 phpMyAdmin 我执行以下查询:

SELECT UNHEX('3530280EDB5AA715929266D1D6F0423ABC27B104')

显示的结果是相同的十六进制数 3530280EDB5AA715929266D1D6F0423ABC27B104,这似乎表明 UNHEX 函数在 linux 上没有执行任何操作。

如果我在 Sequel Pro 中执行相同的查询在 Mac 上,我得到 50(ÛZ§fÑÖðB:¼'±

我不确定发生了什么,也不知道该往哪里看。我在想要么 phpMyAdmin 无法显示二进制文件,要么 UNHEX 确实存在一些问题(看起来不像)任何帮助表示赞赏。

最佳答案

它似乎是一个可配置的设置:"Show binary contents as HEX" .我在同一台服务器上试过你的查询...

SELECT UNHEX('3530280EDB5AA715929266D1D6F0423ABC27B104')

...但使用两个不同的客户端。我可以确认 phpMyAdmin 以您找到的方式转义了二进制输出。您可以使用以下命令仔细检查输出是否正确:

SELECT HEX(UNHEX('3530280EDB5AA715929266D1D6F0423ABC27B104'))='3530280EDB5AA715929266D1D6F0423ABC27B104'

...,它应该返回 1,或者使用简单的 PHP 脚本运行原始查询。总结一下:UNHEX() 没有任何问题。

我使用过的大多数托管服务实际上都允许外部 MySQL 客户端,您只需在控制面板中启用它即可。确保不是这种情况。如果您可以连接 Sequel Pro,那么使用愚蠢的 Web 客户端是愚蠢的。

我建议您进一步调试 PHP 代码。我不清楚你是如何构建哈希来匹配的(你是否在其他查询中检索了盐?)。

关于php - mysql unhex() 不能在 linux 服务器上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8671630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com