在phpMyAdmin中插入失败,但直接使用MySQL时可以正常工作

时间:2016-02-23 16:12:29

标签: php mysql hash

我试图在MySQL中插入哈希,因此我可以测试用户登录。我的第一直觉是使用phpMyAdmin来更快地更新密码(默认哈希是60 0' s),直到我开始使用我的网站制作页面。哈希字段是二进制(60)数据类型。我的错误是请输入有效的十六进制输入

要生成哈希,我使用以下内容:Code Credit

$pass = "password";
$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');
$cost = 10;
$salt = sprintf("$2y$%02d$", $cost) . $salt;
$hash = crypt($pass, $salt);
echo $hash;//Result: $2y$10$XFo5biY5UvZfaRjhDraOFO26yocvwiAwidtGNIvoEezj5zitb2Xem

我已经意识到我正在让网站为我做插页,但这不是问题。我想知道为什么 phpMyAdmin> myDB> myTable>浏览>编辑然后复制粘贴上面的结果不起作用,但是 phpMyAdmin> myDB> myTable>使用以下内容时,SQL 可以正常工作:

UPDATE `myTable` SET `hash`="$2y$10$XFo5biY5UvZfaRjhDraOFO26yocvwiAwidtGNIvoEezj5zitb2Xem" WHERE username = "myusername"

回到 phpMyAdmin> myDB> myTable>浏览我发现我的ASCII哈希已经改为HEX哈希:

2432792431302458466f356269593555765a6661526a684472614f464f3236796f637677694177696474474e49766f45657a6a357a6974623258656d

当我在phpMyAdmin中执行select时,此HEX字符串保持不变,但是,使用MySQL控制台,我从未看到过HEX,它始终是ASCII。有谁知道为什么我不能在phpMyAdmin中插入ASCII哈希,但我可以在MySQL中使用吗?

2 个答案:

答案 0 :(得分:2)

我知道这个问题已有4年历史了,我的回答并不能解决问题,但是可以解释正在发生的事情。因此,为以后的搜索者带来好处:

您描述的行为是由phpmyadmin UI引起的。更新/插入是ajax调用,验证在使用javascript的浏览器中进行。验证将查看您要更新/插入的字段的类型,并仅允许您认为有效的内容。 我假设您的哈希字段是VARBINARY。当我知道仅会输入非语言的8位字符串(如UUID)时,我使用该类型来为服务器节省资源来确定字符串的代码集,这对于VARCHAR来说是一样的。 现在第1403-1410行的phpmyadmin / js / makegrid.js可以了

...
} else if ($this_field.hasClass('hex')) {
if ($(g.cEdit).find('.edit_box').val().match(/^[a-f0-9]*$/i) !== null) {
this_field_params[field_name] = $(g.cEdit).find('.edit_box').val();
} else {
var hexError = '<div class="error">' + PMA_messages.strEnterValidHex + '</div>';
PMA_ajaxShowMessage(hexError, false);
this_field_params[field_name] = PMA_getCellValue(g.currentEditCell);
}
...

这可能是您的问题,就像我的一样。 不幸的是,除了更改源代码外,我没有其他方法可以禁用此功能,这不是一个好主意,因为它将在下一个发行更新中被覆盖。

答案 1 :(得分:0)

我还发现了一个懒惰的解决方法

如果双击以编辑BINARY字段,则可以输入任何有效的字符串,例如“ a”。这将被接受并更新表。 phpMyAdmin还将在框架顶部输出sql查询(UPDATE tablefield ='a'),并在其下方提供[Edit inline]的按钮。 然后,只需将十六进制字符串粘贴到查询中即可。