- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用以下代码将用户密码存储到 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/
我正在开发 Flask 并执行此语句 salt=os.urandom(32) db_session.execute('insert into posUsers values (?, ?, ?, ?)'
在 MySQL 中存储二进制数据时,我使用 hex()和 unhex()功能。但是我可以通过两种方式搜索二进制数据: 方法一 select * from tbl where id=unhex(
对于我所有的项目,我对数据库中的 id 字段使用 VARBINARY(16)。 id 是由以下代码生成的 uuid。 function gen_uuid() { return sprintf(
我使用以下代码将用户密码存储到 mysql 表中,密码列为 BINARY(20) 类型: $salted_hash = sha1($salt . $password); $sql = sprintf(
我有一个包含 UTF-8 字符的数据库,这些字符显示不正确。我认为我可以使用 UNHEX(HEX(column)) != column 条件来了解哪些字段中包含 UTF-8 字符。结果很有趣: id
在处理数据库中的十六进制值时,MySQL UNHEX 和 X 之间的真正区别是什么? 例如。 SELECT * FROM test WHERE guidCol IN (UNHEX('hexadecim
在处理数据库中的十六进制值时,MySQL UNHEX 和 X 之间的真正区别是什么? 例如。 SELECT * FROM test WHERE guidCol IN (UNHEX('hexadecim
我正在尝试将 MySQL 函数 UNHEX() 与运算符 LIKE 一起使用,但我无法获得 $result_2_expected 的预期结果。 我做错了什么? 我正在尝试以下方法,但都没有成功: 喜欢
我正在将一些使用 MySQL 的工具转换为 PostgreSQL。有了这个,我遇到了很多问题,但能够找到大部分内容。我遇到问题的是 HEX() 和 UNHEX()。我试过 encode(%s, 'he
我们使用 sqlalchemy,插入和更新工作正常,但现在我们想将 UUID 从 varchar 迁移到 varbinary。如何做到这一点? 现在的代码示例: engine = create_eng
为什么 SELECT UNHEX(1) 返回一个微笑? 我期待 1。 这里可能发生了什么? 最佳答案 UNHEX 尝试将十六进制数转换为字符串。由于您使用的是 ASCII 编码,因此 UNHEX(1)
我正在尝试学习 Sqlalchemy 并使用 ORM。我的专栏之一将文件哈希存储为二进制文件。在 SQL 中,选择只是 SELECT 类型,列 FROM table WHERE hash = UNHE
我试图从字符串中获取 Java 中的 MySQL 密码哈希,所以我用谷歌搜索了一下,发现了 MySQL 中的 PASSWORD() 是如何工作的: SELECT SHA1(UNHEX(SHA1('te
MySQL 的 UNHEX() 的 PHP 等价物是什么? 例如,以下查询和 PHP 函数应提供相同的值。 SELECT UNHEX(c1) AS unhexed_c1 FROM table; $un
我正在将一些使用 MySQL 的工具转换为 PostgreSQL。有了这个,我遇到了很多问题,但能够找到大部分内容。我遇到问题的是 HEX() 和 UNHEX()。我试过 encode(%s, 'he
我有一个适用于 MySQL(最新版本)的 SQL 脚本。我在 Linux 计算机上从源代码构建了 MariaDB-10.2.8 的副本,并启动并运行了数据库。但是,我的 SQL 脚本失败了,因为 Ma
SQL Server 是否具有与 HEX 和 UNHEX MySQl 函数等效的功能? 最佳答案 2022 年更新:这已过时,阅读有关 CONVERT() 和二进制类型的信息。 你要做什么? 类似脚本
我正在尝试使用 PHP 而不是 MYSQL 在数据库中添加键值 select unhex(md5('google.com')) from x; 输出 HVkg9LRLJ6gCvXfE8FNvWg==
我是一名优秀的程序员,十分优秀!