【问题标题】:how to call encrypted Password PHP to Android Mysql如何将加密的密码 PHP 调用到 Android Mysql
【发布时间】:2019-05-01 14:05:27
【问题描述】:

我的登录活动无法读取加密密码我在没有加密密码的情况下尝试过,它可以工作,我不确定是 php 错误还是活动本身如何解密密码

我正在使用 PASSWORD_BCRYPT


   <?php
     include "conn.php";



     $Email = $_POST['Email'];
    $Password = $_POST['Password'];


    $sql_login = "SELECT * FROM users WHERE Email = :EMAIL and Password =:PASSWORD";
    $stmt = $PDO->prepare($sql_login);
    $stmt->bindParam(':EMAIL', $Email);
    $stmt->bindParam(':PASSWORD', $Password);
    $stmt->execute();

    if ($stmt->rowCount() > 0) {

    $returnApp = array('LOGIN' => 'SUCCESS');

    echo json_encode($returnApp);

    }else{

    $returnApp = array( 'LOGIN' => 'FAILED');

    echo json_encode($returnApp);

    }



    ?>

【问题讨论】:

  • 这与 Android 究竟有什么关系?
  • 我尝试调用密码登录,但提示密码错误
  • 上面的代码适用于未加密的密码。这是非常糟糕的™。顺便说一句,加密的密码也是 Bad™。使用哈希和盐或其他提供者。看看这个:youtube.com/watch?v=8ZtInClXe1Q
  • 使电子邮件地址UNIQUE与之匹配以检索密码。我假设您已经在使用password_hash,因为您声明了“im Using PASSWORD_BCRYPT”,因此您应该使用password_verify() 来根据从数据库中检索到的哈希验证 POST 密码...不是试图将其直接植入 SQL 查询中。
  • 另外,你说你正在使用PASSWORD_BCRYPT,但你的代码没有显示。 PHP 的password_hash 函数的文档提供了一些关于如何使用它的信息。简而言之,你散列密码,存储散列。然后,在尝试匹配时,您使用password_verify 来检查发送的密码是否正确。

标签: php password-hash


【解决方案1】:

要在 PHP 中正确使用密码散列,请使用 password_hashpassword_verify 组合。

当用户注册时,你会得到他的密码,将其散列并存储在数据库中:

$hash = password_hash($_POST['newpassword'], PASSWORD_DEFAULT);
// store $hash in database column "password"

当这个用户想要登录时,你检查哈希:

// fetch hash from database, store it in $stored_hash
$logged_in = password_verify($_POST['password'], $stored_hash);
if ($logged_in === TRUE) {
    echo "Welcome!";
} else {
    echo "Username or password incorrect.";
}

最后的笔记:

  1. 使用PASSWORD_DEFAULT 并确保您的数据库可以存储结果(将来也可以)。哈希算法偶尔会被破解。
  2. 您可以使用 Google 或 Facebook 等其他提供商来处理您的身份验证。不过,这也有其缺点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 2017-11-07
    • 2013-04-15
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    相关资源
    最近更新 更多