基本 php/db 密码加密

Basic php/db password encryption

已经为我的 android 应用程序的 login/register 功能设置了两个简单的 php 文件。

我想知道一个简单的方法来获取 save/write 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 的 link/ 回复,我得出了这个结果,但现在它根本不写入数据库:

$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 进行密码哈希处理,因为它们可以通过使用彩虹表来逆转。

您应该使用带有您定义的秘密的散列机制,它会为您的应用程序提供唯一的散列。您创建的 'secret' 绝不能通过 VCS 共享。

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


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

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

PHP 2015 年 9 月 14 日起将不再支持 5.4,因此请考虑升级到 5.5。