6

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

WordPress 使用 PHPass 散列,我无法验证我的外部应用程序的用户名和密码,因为数据库表中的密码'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 凭据进行外部应用程序登录?

4

6 回答 6

5

您传递了错误的哈希值,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;
于 2013-10-30T09:08:11.933 回答
2

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

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

请密切注意错误日志,以防您错过某些依赖项。

于 2013-10-30T09:38:59.090 回答
1

会这样做<?php wp_check_password( $password, $hash, $user_id ) ?>

于 2013-10-30T08:51:25.660 回答
0
                $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";
                }
于 2015-07-17T12:14:02.023 回答
0

尝试这个...

我的工作对我来说很好

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";
}
于 2016-08-23T06:51:55.713 回答
0

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

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

到你的代码。

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

于 2017-05-20T09:23:32.630 回答