我正在尝试将哈希值插入MySQL,因此可以测试用户登录。我的第一个直觉是使用phpMyAdmin来使快速更新密码更容易(默认哈希为60 0),直到我可以使用我的网站制作一个用于这样做的页面为止。哈希字段是binary(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哈希已更改为十六进制哈希:
2432792431302458466f356269593555765a6661526a684472614f464f3236796f637677694177696474474e49766f45657a6a357a6974623258656d
当我在phpMyAdmin中进行选择时,此十六进制字符串保持不变,但是,使用MySQL控制台,我从未看到过十六进制,它始终是ASCII。有谁知道为什么我不能在phpMyAdmin中插入ASCII哈希,但是我可以在MySQL中插入?
我知道这个问题已有四年了,我的回答并不能解决问题,但是可以解释正在发生的事情。因此,为以后的搜索者带来好处:
您描述的行为是由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);
}
...
这可能是您的问题,就像我的一样。不幸的是,除了更改源代码外,我没有其他方法可以禁用此功能,这不是一个好主意,因为它将在下一个发行更新中被覆盖。