我正在学习如何加密数据库中的用户密码。我选择使用 Salt 的 SHA-256 哈希方法,加密效果很好。
我目前正在使用数据库上的一个测试表,该表只有两个字段,这是创建语句。
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);
?>
然后我稍后尝试使用以下 php 看看是否得到任何匹配:
<?php
include 'connection.php';
$id = $_GET['id'];
$userpassword = $_GET['password'];
$salt = "Th!s$a1tis4Test1ng";
$password = hash('sha256', $salt.$userpassword);
$sql = "select id from test where password = ?";
if($stmt = $conn->prepare($sql)){
$stmt->bind_param("s",$password);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows() > 0)
echo "user found";
else
echo "not found";
}
$stmt->close();
mysqli_close($conn );
?>
什么也没发生,我总是收到“未找到”消息。 我什至尝试通过检索其中一个密码并使用简单的 select 语句来查看它是否会返回任何结果,从而直接与我的 phpAdmin 匹配密码。
select
id
from
test
where
password = 'someEncryptedPassword'
仍然没有结果,即使我可以看到密码确实匹配,但我没有得到任何结果。请帮忙,我做错了什么?
最佳答案
问题在于您正在将字符串与二进制对象进行比较。将字段类型更改为 CHAR(64)
它应该可以工作。
关于php - Mysql 使用具有二进制数据类型的 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32484134/