如何加密插入到MySQL表中的密码?

19 浏览
0 Comments

如何加密插入到MySQL表中的密码?

这个问题已经在这里有答案:

如何在PHP中使用bcrypt进行密码哈希? [重复]

我有一些代码可以注册,但我不知道如何哈希密码。我想使用sha512。

$con=mysqli_connect("localhost","root","","users");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="INSERT INTO users (username, password, email)
VALUES
('$_POST[username]','$_POST[password]','$_POST[email]')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "Thank you.";
mysqli_close($con);

我知道我的mysql登录没有密码。这是一个本地mysql服务器,仅用于测试。

admin 更改状态以发布 2023年5月21日
0
0 Comments

你在这里做的事情存在许多问题。

首先,你容易受到 SQL 注入攻击,因为你没有在 SQL 中对输入进行消毒。

其次,你应该避免使用像 SHA512 这样的快速哈希。它不再被认为是安全的。参考这个问题。你基本上想要使用像 bcrypt 这样的自适应哈希函数。

0
0 Comments

您可以使用hash()函数来对您的密码进行哈希处理:

$hashed_password = hash('sha512', $_POST['password']);

然后修改插入语句,将哈希处理后的密码插入到数据库中:

INSERT INTO users (username, password, email)
VALUES ('$_POST[username]', '$hashed_password', '$_POST[email]');

请注意,由于您使用的是未经过滤的用户输入,因此您的SQL语句容易受到SQL注入攻击。为了提高安全性并保护您数据的完整性,请在使用SQL语句之前考虑对输入进行转义和验证。一种实现方法是使用mysqli_real_escape_string()函数:

$escaped_username = mysqli_real_escape_string( $con, $_POST['username'] );
$escaped_email = mysqli_real_escape_string( $con, $_POST['email'] );

0