【问题标题】:Password Encryption Android, PHP密码加密 Android, PHP
【发布时间】: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


【解决方案1】:

您需要使用 password_verify($password, $hash) 来验证密码。新的哈希将使用不同的盐并产生新的哈希值。

【讨论】:

  • 我刚刚更新了我的错误。请重新访问查询和帮助。
  • 即使结果只有一行,您仍然需要使用 $row[0]['password']
【解决方案2】:

您必须使用另一个名为 password_verify 的 php 函数,它将验证是否使用了特定密码来创建哈希。

http://php.net/manual/en/function.password-verify.php

【讨论】:

  • 您有什么可以帮助我们的吗?错误信息?还是只是返回 false?
  • 我能够读取数据库中的哈希值。而且我也能够将这个哈希值转移到 Android 上。但我不确定如何调试 Password_verify 函数的输出。
  • 我刚刚更新了我的错误。请重新访问查询和帮助。
  • 试试这个 $passwordhash = password_hash($mypassword, PASSWORD_BCRYPT);我遇到了意外的 php 哈希行为问题。使用特定的哈希算法会有所帮助。
猜你喜欢
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多