我正在学习如何在我的数据库中加密用户密码。我选择使用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);
?>
然后我试着看看我是否使用以下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 );
?>
没有任何反应,我总是收到“未找到”消息。 我甚至尝试使用我的phpAdmin直接匹配密码,方法是检索其中一个密码并使用一个简单的select语句来查看它是否会返回任何结果。
select
id
from
test
where
password = 'someEncryptedPassword'
没有结果,即使我可以看到密码确实匹配但我没有得到任何结果。请帮忙,我做错了什么?
答案 0 :(得分:1)
试试这个
$password = hash('sha256', $salt.$userpassword);
$sql = "select id from test where BINARY password = ?";
https://dev.mysql.com/doc/refman/5.0/en/charset-binary-op.html