【问题标题】:Basic php/db password encryption基本 php/db 密码加密
【发布时间】:2015-11-20 18:52:02
【问题描述】:

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

【问题讨论】:

  • 所以...使用相同的“散列”函数?只是不是 MD5 ;-)
  • PHP 完成了它的工作,因为你告诉它该做什么; “以纯文本形式存储密码”。顺便说一句,MD5 是哈希而不是加密算法。

标签: php android encryption passwords


【解决方案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。

【讨论】:

  • 致命错误:在第 7 行调用 /home/snapchainco/public_html/Register.php 中未定义的函数 password_hash()
  • 您使用的是哪个版本的 PHP?你可以通过在命令行中运行 php -v 来发现
  • 我在你的系统上没有 php 编译器,但在 web 服务器中使用 php .. 它肯定是 5.5 php 版本
  • 只有在PHP版本低于5.5的情况下才会出现该错误...是否可以仔细检查?
  • 很遗憾,这些方法在 5.4 中不可用,请尝试使用 crypt():php.net/manual/en/function.crypt.php
猜你喜欢
  • 2023-03-23
  • 2015-10-07
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2017-11-09
  • 2017-04-11
  • 1970-01-01
相关资源
最近更新 更多