【发布时间】:2017-11-09 08:45:13
【问题描述】:
更新:
到目前为止,我的 android 应用程序使用纯文本密码运行良好。我正在尝试对密码进行哈希处理作为下一步。找不到错误是什么。
我非常确定使用纯文本密码可以正常通信。 我验证了散列值已正确存储在数据库中(在数据库中为该属性使用了 varchar(80))。
请帮忙。
注册.php
<?php
include("config.php");
session_start();
// username and password sent from form
$firstName = mysqli_real_escape_string($db,$_POST["firstName"]);
$lastName = mysqli_real_escape_string($db,$_POST["lastName"]);
$email = mysqli_real_escape_string($db,$_POST["email"]);
$myusername = mysqli_real_escape_string($db,$_POST["username"]);
$mypassword = mysqli_real_escape_string($db,$_POST["password"]);
$passwordhash = password_hash($mypassword, PASSWORD_DEFAULT);
$sql = "INSERT into user VALUES ('$firstName', '$lastName', '$myusername', '$email', '$passwordhash')";
$result = mysqli_query($db,$sql);
if($result)
{
echo "success";
}else{
echo "failed";
}
?>
登录.php
<?php
include("config.php");
session_start();
// username and password sent from form
$myusername = mysqli_real_escape_string($db,$_POST["username"]);
$mypassword = mysqli_real_escape_string($db,$_POST["password"]);
$sql = "SELECT * FROM user WHERE username = '$myusername'";
$result = mysqli_query($db,$sql);
$count = mysqli_num_rows($result);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
$hash = $row['password'];
// If result matched $myusername and $mypassword, table row must be 1 row
if(true === password_verify($mypassword,$hash)) {
echo "success". "\n";
echo $row['firstName'] . "\n";
echo $row['lastName'] . "\n";
echo $row['username'] . "\n";
echo $row['email'] . "\n";
}
else{
echo " Incorrect Login. Please try again ";
}
?>
【问题讨论】:
-
不要再调用
password_hash(),而是使用password_verify() -
"如果 Android 有加密方式" 只需在 PHP 端使用 SSL/TLS。 “这样我就可以直接查询数据库,而无需在 php 级别执行任何加密” 不要那样做。您希望存储的密码被散列,而不是纯文本。
-
是的。通过“这样我可以直接查询数据库而不在 php 级别执行任何加密”我的意思是我想在 Android 应用程序本身中加密密码并通过互联网发送。不是纯文本。
-
我刚刚更新了我的错误。请重新访问查询和帮助。
标签: php android encryption hash