我已经为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()
:
PHP 5.4将在2015年9月14日不支持,所以请考虑升级到5.5。