Come WordPress cripta le password?

24 ott 2011, 23:53:09
Visualizzazioni: 44.2K
Voti: 7

Possibile Duplicato:
Come validare una password generata da WordPress nel database usando PHP?

Sto lavorando con un sito realizzato con WordPress e ho bisogno di aggiungere alcune parti esterne a WP e verificare il login degli utenti, ma non riesco a trovare come WordPress cripta la password prima di scriverla nel database...

Ho provato con md5 ma non è quello...

Qualcuno sa come verificare la password al di fuori di WordPress, senza utilizzare i suoi plugin/verificatori, con codice PHP puro?

2
Commenti

Chiudo questa domanda come duplicato della domanda a cui @SharkTheDark ha effettivamente la possibilità di accettare risposte...

EAMann EAMann
25 ott 2011 05:58:04

è meglio controllare qui per maggiori informazioni. http://www.kvcodes.com/2016/09/wordpress-password-hash-generator/

Kvvaradha Kvvaradha
17 set 2016 10:18:18
Tutte le risposte alla domanda 3
2
11

La libreria per la crittografia delle password si trova in /wp-includes/class-phpass.php. Si tratta del Portable PHP Password hashing framework.

24 ott 2011 23:56:50
Commenti

Puoi scrivere alcuni esempi su come usarlo? Dato che è ancora un plugin WP, non PHP puro come ho chiesto, ma se puoi scrivere come usarlo all'interno di PHP sarebbe utile...

SharkTheDark SharkTheDark
25 ott 2011 00:21:13

Questo non è un plugin WordPress. È un file di classe PHP standard incluso nel framework WordPress. Devi semplicemente includerlo in un nuovo file PHP, creare un'istanza e usarlo.

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

Sembra che tu voglia utilizzare codice esterno per validare username/password contro il database di WordPress. Se è così, passerai molto tempo a reinventare la ruota. Ma per un buon esempio su come fare questo utilizzando PHP puro, è una buona idea dare un'occhiata alle funzioni core di WP che già lo fanno.

Un caso esemplare è `wp_check_password()':

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

    // Se l'hash è ancora in md5...
    if ( strlen($hash) <= 32 ) {
        $check = ( $hash == md5($password) );
        if ( $check && $user_id ) {
            // Rigenera l'hash utilizzando il nuovo sistema.
            wp_set_password($password, $user_id);
            $hash = wp_hash_password($password);
        }

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

    // Se l'hash memorizzato è più lungo di un MD5, presumiamo che
    // sia il nuovo stile di hash portabile phpass.
    if ( empty($wp_hasher) ) {
        require_once ( ABSPATH . 'wp-includes/class-phpass.php');
        // Di default, usa l'hash portabile da phpass
        $wp_hasher = new PasswordHash(8, TRUE);
    }

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

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

Innanzitutto, WordPress verifica se la password hashata dell'utente utilizza ancora il vecchio MD5 per la sicurezza. Questo serve per mantenere la compatibilità con gli aggiornamenti. Se la password è in MD5, allora WordPress la sostituirà automaticamente con un nuovo hash utilizzando il nuovo sistema (la chiamata a wp_set_password()). Se non è in MD5, WP passa al nuovo sistema di hashing.

Prima includiamo il Portable PHP Hashing Framework (già menzionato da @John Watson in un'altra risposta) e creiamo un'istanza di esso, memorizzandola nella variabile globale $wp_hasher.

Poi passiamo la password in testo semplice e l'hash per verificarla, utilizzando il metodo CheckPassword() della libreria.

Se vuoi utilizzare questo in una libreria esterna, dovrai prima fare include/require della libreria, poi istanziarla, quindi passare la tua password in testo semplice e il suo hash. Quindi un po' di pseudo-codice non testato...

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

    return $hasher->CheckPassword( $plaintext, $hash );
}
25 ott 2011 00:39:59
1
require_once( '/percorso/verso/wp-includes/class-phpass.php' );
$wp_hasher = new PasswordHash( 8, TRUE );
$password = 'swordfish'; // Non tradurre password
$hashed_password = $wp_hasher->HashPassword( $password );
25 ott 2011 00:36:25
Commenti

È possibile crittografare anche la password della pagina protetta nel database?

Samuel Samuel
31 gen 2018 17:23:35