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

时间:2013-07-22 20:53:13

标签: php mysql hash sha512

我有一些代码可以注册,但我不知道如何散列密码。我想用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服务器。

5 个答案:

答案 0 :(得分:5)

您可以使用hash()功能哈希密码:

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

然后修改insert语句以将散列密码插入数据库:

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'] );

答案 1 :(得分:3)

你在这里做的事情有很多问题。

首先,您很容易受到SQL注入的攻击,因为您没有在SQL中清理输入。

其次,你应该避免使用像SHA512这样的快速哈希。它不再被认为是安全的。看看this question。你基本上想要使用像bcrypt这样的自适应散列函数。

答案 2 :(得分:2)

以下是如何散列密码的示例:

<?php
$password = hash('sha512', $_POST[password]);

我建议输入密码。在这里阅读更多相关信息:
http://www.aspheute.com/english/20040105.asp

另请阅读“mysqli_real_escape_string

...和 Prepared Statements

答案 3 :(得分:1)

首先清理输入数据。 $ password = filter_input(INPUT_POST,'password',FILTER_SANITIZE_STRING);

哈希密码字符串

$hashedPassword = hash('sha512', $password);

更好地散列密码的方法是使用新密码哈希API

$hashedPassword = password_hash($password, PASSWORD_DEFAULT);

答案 4 :(得分:-2)

请在进入数据库之前转义您的数据。他们可以接受攻击。

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