¿Cómo WordPress encripta las contraseñas?

24 oct 2011, 23:53:09
Vistas: 44.2K
Votos: 7

Posible Duplicado:
¿Cómo validar contraseñas generadas por WordPress en la BD usando PHP?

Estoy trabajando con un sitio hecho en WordPress, y necesito agregar algunas partes que están fuera de WP, y verificar el inicio de sesión del usuario, pero no puedo encontrar cómo WP está encriptando la contraseña antes de escribirla en la BD...

Lo intenté con md5 pero no es...

¿Alguien sabe cómo verificar la contraseña fuera de WP, sin usar sus plugins/verificadores, código PHP puro?

2
Comentarios

Cerrando esto como un duplicado de la pregunta en la que @SharkTheDark realmente tiene la capacidad de aceptar respuestas...

EAMann EAMann
25 oct 2011 05:58:04

Sería mejor que consultes aquí para obtener más información. http://www.kvcodes.com/2016/09/wordpress-password-hash-generator/

Kvvaradha Kvvaradha
17 sept 2016 10:18:18
Todas las respuestas a la pregunta 3
2
11

La biblioteca de encriptación de contraseñas se encuentra en /wp-includes/class-phpass.php. Se trata del Marco Portable PHP Password Hashing.

24 oct 2011 23:56:50
Comentarios

¿Puedes escribir algunos ejemplos de cómo usarlo? Como es un plugin de WP nuevamente, no es PHP claro como pedí, pero si puedes escribir cómo usarlo dentro de PHP sería útil...

SharkTheDark SharkTheDark
25 oct 2011 00:21:13

Esto no es un plugin de WordPress. Es un archivo de clase PHP estándar que viene incluido con el framework de WordPress. Solo debes incluirlo en un nuevo archivo PHP, crear una instancia y usarlo.

John Watson John Watson
25 oct 2011 00:40:06
0

Parece que deseas utilizar código externo para validar nombres de usuario/contraseñas contra la base de datos de WordPress. Si es correcto, vas a pasar mucho tiempo reinventando la rueda. Pero para un buen ejemplo de cómo hacer esto usando PHP directo, es buena idea echar un vistazo a las funciones principales de WP que ya lo hacen.

Un ejemplo claro es `wp_check_password()':

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

    // Si el hash todavía es MD5...
    if ( strlen($hash) <= 32 ) {
        $check = ( $hash == md5($password) );
        if ( $check && $user_id ) {
            // Rehashear usando nuevo hash.
            wp_set_password($password, $user_id);
            $hash = wp_hash_password($password);
        }

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

    // Si el hash almacenado es más largo que un MD5, se presume
    // que es el nuevo estilo de hash portable phpass.
    if ( empty($wp_hasher) ) {
        require_once ( ABSPATH . 'wp-includes/class-phpass.php');
        // Por defecto, usa el hash portable de phpass
        $wp_hasher = new PasswordHash(8, TRUE);
    }

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

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

Primero, WordPress verifica si el hash de la contraseña del usuario todavía utiliza el antiguo MD5 por seguridad. Esto es para preservar la compatibilidad hacia atrás en actualizaciones. Si la contraseña es MD5, entonces WordPress la reemplazará automáticamente con un nuevo hash usando el sistema nuevo (la llamada a wp_set_password()). Si no es MD5, entonces WP pasa al nuevo sistema de hashing.

Primero, incluimos el Portable PHP Hashing Framework (ya mencionado por @John Watson en otra respuesta) y creamos una instancia del mismo, almacenándola en la variable global $wp_hasher.

Luego pasamos la contraseña en texto plano y el hash para verificarlo, usando el método CheckPassword() de la biblioteca.

Si deseas usar esto en una biblioteca externa, primero tendrás que include/require la biblioteca, luego instanciarla, y después pasar tu contraseña en texto plano y su hash. Algo de pseudocódigo no probado...

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

    return $hasher->CheckPassword( $plaintext, $hash );
}
25 oct 2011 00:39:59
1
require_once( '/ruta/a/wp-includes/class-phpass.php' ); // Cargar la clase de hash de contraseñas de WordPress
$wp_hasher = new PasswordHash( 8, TRUE ); // Crear una instancia del hasher con 8 rondas y activar el "portable hashing"
$password = 'swordfish'; // Contraseña en texto plano a hashear
$hashed_password = $wp_hasher->HashPassword( $password ); // Generar el hash de la contraseña
25 oct 2011 00:36:25
Comentarios

¿Es posible también hashear la contraseña de la página protegida en la base de datos?

Samuel Samuel
31 ene 2018 17:23:35