【问题标题】:Check WordPress hashed password with plain password使用普通密码检查 WordPress 哈希密码
【发布时间】:2013-10-30 08:46:10
【问题描述】:

我正在构建一个外部应用程序,用户登录凭据将从 WordPress 站点数据库表“用户”中获取

WordPress 使用 PHPPass 散列,我无法验证我的外部应用程序的用户名和密码,因为数据库表 'users' 中的密码已散列

我正在尝试使用 wp_check_password 函数检查带有散列密码的普通密码,但我失败了,这段代码没有写回任何内容

<?php

$password = '965521425';
$hash = '$P$9jWFhEPMfI.KPByiNO9IyUzSTG7EZK0';

require_once('/home/nhtsoft/public_html/project/wp-includes/class-phpass.php');

function wp_check_password($password, $hash) {
    global $wp_hasher;

    if ( empty($wp_hasher) ) {
        $wp_hasher = new PasswordHash(8, true);
    }
    $check = $wp_hasher->CheckPassword($password, $hash);
    return apply_filters('check_password', $check, $password, $hash);
}    
?>

这段代码给了我一个空白页。

如何检查此密码以便我可以使用这些 WordPress 凭据登录外部应用程序?

【问题讨论】:

  • wordpress 不会只使用 md5 散列。 . . . @user2092317

标签: php mysql wordpress hash phpass


【解决方案1】:

您传递了错误的哈希值,965521425 的哈希值为 $P$BmI5G.LOoEx1iH.naNqVhWnSh5sMp31,您只需将以下代码写入您的文件:

require_once($_SERVER['DOCUMENT_ROOT']."/wp-load.php");
 $password = '965521425';
 $hash = '$P$BmI5G.LOoEx1iH.naNqVhWnSh5sMp31';
 var_dump(wp_check_password($password, $hash));

exit;

【讨论】:

  • 是的,我得到了输出,你可以将代码放入functions.php和var_dump(wp_check_password($password, $hash); exit; 并检查它。
  • 因为我需要在与 wordpress 无关的外部应用程序中实现这一点,所以我包含了 class-phpass.php 文件并编写了上面的代码。 . .对不起,但我没有告诉你,在哪里放置代码。 . .你能详细告诉我吗。 . .
  • 如果你使用外部文件,你需要加载 wp-load.php 文件。请参阅我在上面编辑的代码。
  • 好极了。 . .非常感谢@Bhumi
【解决方案2】:

在您的代码中,您包含 wp 库,看起来您重新定义了一个名为 wp_check_password 的函数,但您根本没有调用任何函数。在结束 php 标记 ("?>") 之前添加以下行,然后重试。

echo (wp_check_password($password, $hash) ? 'TRUE' : 'FALSE');

请留意错误日志,以防您遗漏某些依赖项。

【讨论】:

    【解决方案3】:

    我会这样做&lt;?php wp_check_password( $password, $hash, $user_id ) ?&gt; Refer

    【讨论】:

    • 我已经试过了。 . .这里与 $user_id 无关
    【解决方案4】:
                    $password_hashed = '$P$Bgf2Hpr5pOVOYAvQZUhUZeLIi/QuPr1';
                    $plain_password = '123456';
                    if ((wp_check_password($plain_password, $password_hashed)) == 1) {
                        echo "YES, Matched";
                    } else {
                        echo "No, Wrong Password";
                    }
    

    【讨论】:

      【解决方案5】:

      试试这个...

      我的工作对我来说很好

      require_once( ABSPATH . WPINC . '/class-phpass.php');
      $wp_hasher = new PasswordHash(8, TRUE);
      $plain_password     = trim($_POST['pass_current']); //user type password
      $user               = get_user_by('id', get_current_user_id());
      $password_hashed    =  $user->user_pass;
      
      if($wp_hasher->CheckPassword($plain_password, $password_hashed)) {
           echo "YES, Matched";
      }else{
          echo "No, Wrong Password";
      }
      

      【讨论】:

        【解决方案6】:

        Bhumi Shah 写的是正确的,你应该添加

        require_once($_SERVER['DOCUMENT_ROOT']."/wp-load.php");
        

        到您的代码。

        但任何密码(数字或文本)的散列值都不是一件可靠的事情,可能有很多事情,这就是为什么它们只能与 wp_check_password 进行比较

        【讨论】:

          猜你喜欢
          • 2018-02-11
          • 2019-04-07
          • 2020-02-11
          • 1970-01-01
          • 2020-04-27
          • 1970-01-01
          • 1970-01-01
          • 2011-04-30
          • 2015-09-28
          相关资源
          最近更新 更多