Как WordPress шифрует пароли?

24 окт. 2011 г., 23:53:09
Просмотры: 44.2K
Голосов: 7

Возможный дубликат:
Как проверить пароль, сгенерированный WordPress в базе данных, используя PHP?

Я работаю с сайтом на WordPress и мне нужно добавить некоторые части вне WP, а также проверять логин пользователя, но я не могу найти, как WP шифрует пароль перед записью в базу данных...

Я пробовал использовать md5, но это не то...

Кто-нибудь знает, как проверить пароль вне WP, не используя его плагины/проверки, на чистом PHP коде?

2
Комментарии

Закрываю этот вопрос как дубликат того, на который @SharkTheDark действительно может принимать ответы...

EAMann EAMann
25 окт. 2011 г. 05:58:04

лучше посмотрите здесь для получения дополнительной информации. http://www.kvcodes.com/2016/09/wordpress-password-hash-generator/

Kvvaradha Kvvaradha
17 сент. 2016 г. 10:18:18
Все ответы на вопрос 3
2
11

Библиотека шифрования паролей находится в /wp-includes/class-phpass.php. Это Портативный фреймворк для хэширования паролей на PHP (Portable PHP Password hashing framework).

24 окт. 2011 г. 23:56:50
Комментарии

Можете привести несколько примеров, как это использовать? Поскольку это снова плагин для WP, а не чистый PHP, как я просил, но если вы можете написать, как использовать его внутри PHP, это будет полезно...

SharkTheDark SharkTheDark
25 окт. 2011 г. 00:21:13

Это не плагин WordPress. Это стандартный PHP-класс, который входит в состав фреймворка WordPress. Вам просто нужно подключить его в новом PHP-файле, создать экземпляр и использовать.

John Watson John Watson
25 окт. 2011 г. 00:40:06
0

Похоже, вы хотите использовать внешний код для проверки имен пользователей и паролей в базе данных WordPress. Если это так, вы потратите много времени на изобретение велосипеда. Но для хорошего примера того, как это сделать на чистом PHP, стоит взглянуть на основные функции WordPress, которые уже реализуют эту функциональность.

Яркий пример — функция `wp_check_password()`:

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

    // Если хеш всё ещё в MD5...
    if ( strlen($hash) <= 32 ) {
        $check = ( $hash == md5($password) );
        if ( $check && $user_id ) {
            // Пересоздаём хеш с использованием нового алгоритма.
            wp_set_password($password, $user_id);
            $hash = wp_hash_password($password);
        }

        return apply_filters('check_password', $check, $password, $hash, $user_id);
    }

    // Если сохранённый хеш длиннее MD5, предполагаем,
    // что используется новый phpass portable hash.
    if ( empty($wp_hasher) ) {
        require_once ( ABSPATH . 'wp-includes/class-phpass.php');
        // По умолчанию используем portable hash из phpass
        $wp_hasher = new PasswordHash(8, TRUE);
    }

    $check = $wp_hasher->CheckPassword($password, $hash);

    return apply_filters('check_password', $check, $password, $hash, $user_id);
}

Сначала WordPress проверяет, использует ли хешированный пароль пользователя устаревший MD5 для безопасности. Это нужно для сохранения обратной совместимости при обновлениях. Если пароль действительно в MD5, то WordPress автоматически заменит его новым хешем с использованием новой системы (вызов wp_set_password()). Если он не в MD5, то WordPress переходит к новой системе хеширования.

Сначала мы подключаем Portable PHP Hashing Framework (уже упомянутый @John Watson в другом ответе) и создаём его экземпляр, сохраняя его в глобальной переменной $wp_hasher.

Затем мы передаём пароль в открытом виде и хеш для его проверки, используя метод CheckPassword() этой библиотеки.

Если вы хотите использовать это во внешней библиотеке, вам сначала нужно include/require саму библиотеку, затем создать её экземпляр, а затем передать пароль в открытом виде и его хеш. Вот пример непроверенного псевдокода...

function validate_password( $plaintext, $hash ) {
    require_once( 'class-phpass.php' );
    $hasher = new PasswordHash(8, TRUE);

    return $hasher->CheckPassword( $plaintext, $hash );
}
25 окт. 2011 г. 00:39:59
1
// Подключаем файл с классом для хеширования паролей в WordPress
require_once( '/путь/до/wp-includes/class-phpass.php' );

// Создаем экземпляр класса PasswordHash с параметрами:
// 8 - количество итераций хеширования
// TRUE - использование "переносимого" хеширования
$wp_hasher = new PasswordHash( 8, TRUE );

// Пароль, который нужно захешировать
$password = 'swordfish';

// Генерируем хеш пароля
$hashed_password = $wp_hasher->HashPassword( $password );
25 окт. 2011 г. 00:36:25
Комментарии

Можно ли также хэшировать пароль защищенной страницы в базе данных?

Samuel Samuel
31 янв. 2018 г. 17:23:35