Php Mysql使用具有二进制数据类型的where子句
我正在学习如何加密数据库中的用户密码。我选择了使用Salt的SHA-256散列方法,并且加密进行得很好 我目前正在处理一个只有两个字段的数据库测试表,下面是create语句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'];
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 = ?";