基本的php / db密码加密

时间:2015-08-26 16:09:21

标签: php android encryption passwords

在我的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);

1 个答案:

答案 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。