检查WordPress加密密码是否匹配原始密码

6
我正在建立一个外部应用程序,用户登录凭据将从WordPress网站数据库表“users”中获取。
WordPress使用PHPass哈希,我无法验证外部应用程序的用户名和密码,因为数据库表中的密码经过了哈希处理。
我正在尝试使用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 - ManojGeek
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;

是的,我得到了输出,你可以将代码放入functions.php中并使用var_dump(wp_check_password($password, $hash);exit;)进行检查。 - Bhumi Shah
由于我需要在与WordPress无关的外部应用程序中实现此功能,因此我已经包含了class-phpass.php文件并编写了上面的代码...抱歉,但我没有理解您的意思,在哪里放置代码...您能否详细告诉我呢? - ManojGeek
如果您正在使用外部文件,您需要加载wp-load.php文件。请参见我上面编辑的代码。 - Bhumi Shah
太棒了。非常感谢 @Bhumi - ManojGeek

2
在你的代码中,你包含了wp库,看起来你重新定义了一个名为wp_check_password的函数,但你根本没有调用任何函数。在php标签("?>")之前添加以下行,然后再试一次。
echo (wp_check_password($password, $hash) ? 'TRUE' : 'FALSE');

如果您错过了一些依赖项,请留意错误日志。


1
我会这样做:<?php wp_check_password( $password, $hash, $user_id ) ?>,并且参考Refer

我已经尝试过这个了……这与$user_id无关。 - ManojGeek

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";
}

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";
                }

0

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

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

回到您的代码。

但是对于任何密码(数字或文本),哈希值并不是一个固定的东西,可能是许多种情况,因此只能使用wp_check_password进行比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接