WordPress 密码生成和密码验证

简介

WordPress户密码保存在wp_users数据表的user_pass字段,密码的形式是随机且不可逆,同一个明文的密码在不同时间,产生的密文也不一样。

密码生成流程

1、 随机产生一个salt 并将salt和password相加

2、 进行了count次md5 然后和encode64的hash数值累加

3、 最后得到一个以$P$开头的密码,这个密码每次产生的结果都不一样

以下为在wordpress中调用密码生成的代码

$password = '123';
global $wp_hasher;
if ( empty($wp_hasher) ) {
    require_once( './wp-includes/class-phpass.php');
    $wp_hasher = new PasswordHash(8, TRUE);
}
$user_pass = $wp_hasher->HashPassword($password); // 生成密码

$data = $wp_hasher->CheckPassword($password,$user_pass); // 检验密码
if($data){
    echo '密码正确';
} else {
    echo '密码错误';
}

PasswordHash 在 \wp-includes\class-phpass.php 中。

 

另外 WordPress 封装的有两个函数,也很好用:

//原始密码
$passwordValue  = "test";
$sigPassword    = wp_hash_password($passwordValue);
$data           = wp_check_password($passwordValue, $sigPassword);
if($data){
    echo '密码正确';
}else{
    echo '密码错误';
}

重置密码 SQL:

UPDATE wp_users SET user_pass = MD5('new_password') WHERE user_login = 'username';

 

wp_signon()函数

wp_signon()函数用于登录用户,它会尝试根据提供的用户名和密码登录用户。如果登录成功,它会返回用户的WP_User对象;如果失败,返回false。

$info = array(
    'user_login'    => $username, // 用户名
    'user_password' => $password, // 密码
    'remember'      => true       // 是否记住登录状态
);
 
$user = wp_signon( $info, false );
 
if ( is_wp_error($user) ) {
    // 登录失败
    echo '登录失败: ' . $user->get_error_message();
} else {
    // 登录成功
    echo '登录成功!';
}

 

wp_authenticate()函数

wp_authenticate()函数用于验证用户凭证,但它通常不直接用于登录过程。它主要用于插件或主题开发中,当你需要验证用户信息但没有立即登录用户时。例如,你可能在用户提交表单后想检查用户名和密码是否正确,但不希望自动登录用户。

$user = wp_authenticate($username, $password);
 
if ( is_wp_error($user) ) {
    // 凭证验证失败
    echo '凭证验证失败: ' . $user->get_error_message();
} else {
    // 凭证验证成功,但还未登录用户
    echo '凭证验证成功!';
}

修改时间 2025-05-18

声明:本站所有文章和图片,如无特殊说明,均为原创发布,转载请注明出处。
随机推荐
JavaScript 的历史
JavaScript audio 教程
JavaScript location对象
Photoshop 使用插件支持 webp 格式的文件
HTML input radio 单选按钮
Node.js net 模块
Wordpress 主样式表(style.css)
浏览器的同源和跨域