Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql使用具有二进制数据类型的where子句_Php_Mysql_Encryption - Fatal编程技术网

Php Mysql使用具有二进制数据类型的where子句

Php Mysql使用具有二进制数据类型的where子句,php,mysql,encryption,Php,Mysql,Encryption,我正在学习如何加密数据库中的用户密码。我选择了使用Salt的SHA-256散列方法,并且加密进行得很好 我目前正在处理一个只有两个字段的数据库测试表,下面是create语句 create table test( id int auto_increment, password binary(70), primary key(id)) 在我的php中,我使用以下代码加密密码: <?php include 'connection.php'; $id = $_GET['id'];

我正在学习如何加密数据库中的用户密码。我选择了使用Salt的SHA-256散列方法,并且加密进行得很好

我目前正在处理一个只有两个字段的数据库测试表,下面是create语句

create table test(
  id int auto_increment,
  password binary(70),
  primary key(id))
在我的php中,我使用以下代码加密密码:

<?php

include 'connection.php';

$id = $_GET['id'];
$userspassword = $_GET['password'];

$salt = "Th!s$a1tis4Test1ng";

$password = hash('sha256', $salt.$userspassword);
$sql = "insert into test (password) values (?)";
if($stmt =  $conn->prepare($sql)){
    $stmt->bind_param("s",$password);
    $stmt->execute();
    echo "stored</br>";
}

$stmt->close();
mysqli_close($conn);
?>
仍然没有结果,即使我可以看到密码确实匹配,但我没有得到结果。请帮忙,我做错了什么

试试这个

$password = hash('sha256', $salt.$userpassword);
$sql = "select id from test where BINARY password = ?";

问题在于,您正在将字符串与二进制对象进行比较。将字段类型更改为
CHAR(64)
,它应该可以工作。

您真的应该使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用
密码\u散列()
不必是
$stmt->bind_参数(1,$password)?不@Thiagaougustusoliveira,您不会在那里使用
'1'
。为什么要在密码字段中使用二进制类型?SHA-256不创建64个字符的字符串吗?当然,您的字段类型应该是
CHAR(64)
。@KevinNagurski谢谢兄弟,我把它从二进制改为CHAR,现在可以工作了。我使用二进制的原因是,我遵循的一些教程说,我必须使用二进制,因为它更有效或类似的东西..你可以发布你的评论作为答案,我会接受它汉克斯兄弟。。。非常感谢
select
      id
from
      test
where
      password = 'someEncryptedPassword'
$password = hash('sha256', $salt.$userpassword);
$sql = "select id from test where BINARY password = ?";