如何加密插入到MySQL表中的密码?
如何加密插入到MySQL表中的密码?
这个问题已经在这里有答案:
我有一些代码可以注册,但我不知道如何哈希密码。我想使用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日
你在这里做的事情存在许多问题。
首先,你容易受到 SQL 注入攻击,因为你没有在 SQL 中对输入进行消毒。
其次,你应该避免使用像 SHA512 这样的快速哈希。它不再被认为是安全的。参考这个问题。你基本上想要使用像 bcrypt 这样的自适应哈希函数。
您可以使用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'] );