在我的Android应用程序上为登录/注册功能设置了两个简单的php文件。
我想知道一种简单的方法来保存/写入加密密码到mysql数据库。目前它只能写明文密码。
register.php的代码是:
$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$statement = mysqli_prepare($con, "INSERT INTO User (username, email, password) VALUES (?, ?, ?)" );
mysqli_stmt_bind_param($statement, "sss", $username, $email, $password);
mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);
mysqli_close($con);
和登录资料的代码是:
$password = $_POST["password"];
$username = $_POST["username"];
$statement = mysqli_prepare($con, "SELECT * FROM User WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($statement, "ss", $username, $password);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $userID, $username, $email, $password);
$user = array();
while(mysqli_stmt_fetch($statement)) {
$user[username] = $username;
$user[email] = $email;
$user[password] = $password;
}
echo json_encode($user);
mysqli_stmt_close($statement);
mysqli_close($con);
我知道的非常简单的问题,但只是学习自己。感谢
编辑:
基于Jamesking56的链接/响应,我已经提出了这个问题,但现在它根本没有写入db:
$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
$statement = mysqli_prepare($con, "INSERT INTO User (username, email, password) VALUES (?, ?, ?)" );
mysqli_stmt_bind_param($statement, "sss", $username, $email, $passwordHash);
mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);
mysqli_close($con);
答案 0 :(得分:1)
如果您使用的是PHP 5.5或更高版本,则有一些内置函数可用于密码散列,称为password_hash()
和password_verify()
。
永远不要单独使用MD5或SHA1进行密码哈希,因为可以使用彩虹表来反转它们。
您应该使用散列机制和您定义的秘密,它会为您提供应用程序所特有的散列。您创建的“秘密”绝不应通过VCS共享。
有关这方面的好文章可以在这里找到:http://www.phptherightway.com/#password_hashing
对于使用低于5.5的PHP版本的任何人,您可以使用crypt()
:
http://php.net/manual/en/function.crypt.php
自2015年9月14日起,PHP 5.4将不再受支持,因此请考虑升级到5.5。