基本的php/db密码加密


Basic php/db password encryption

我已经为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);

如果您使用的是PHP 5.5或更新版本,则有一些用于密码散列的内置函数password_hash()password_verify()

永远不要单独使用MD5或SHA1进行密码哈希,因为它们可以通过使用彩虹表来逆转。

你应该使用带有你定义的秘密的哈希机制,该机制为你的应用程序提供唯一的哈希值。你创建的"秘密"永远不应该通过VCS共享。

关于这方面的一篇好文章可以在这里找到:http://www.phptherightway.com/#password_hashing


对于使用PHP版本低于5.5的人,可以使用crypt():

http://php.net/manual/en/function.crypt.php

PHP 5.4将在2015年9月14日不支持,所以请考虑升级到5.5。