Cum criptează WordPress parolele?
Posibilă Duplicare:
Cum să validezi parola generată de WordPress din baza de date folosind PHP?
Lucrez cu un site făcut în WordPress și trebuie să adaug câteva componente în afara WordPress-ului pentru a verifica autentificarea utilizatorilor, dar nu pot găsi cum criptează WordPress parolele înainte de a le scrie în baza de date...
Am încercat cu md5 dar nu este...
Știe cineva cum să verific parola în afara WordPress, fără a folosi plugin-urile/verificatoarele sale, doar cod PHP simplu?
Biblioteca de criptare a parolelor se află în /wp-includes/class-phpass.php. Aceasta este Platforma portabilă PHP pentru hashing-ul parolelor.

Poți scrie câteva exemple despre cum să-l folosești? Deoarece este din nou un Plugin WP, nu PHP clar cum am cerut, dar dacă poți scrie cum să-l folosești în interiorul PHP va fi util...

Se pare că doriți să folosiți cod extern pentru a valida numele de utilizator/parole împotriva bazei de date WordPress. Dacă este corect, veți petrece mult timp reinventând roata. Dar pentru un bun exemplu despre cum să faceți acest lucru folosind PHP direct, este o idee bună să aruncați o privire asupra funcțiilor de bază WordPress care fac deja acest lucru.
Un exemplu concret, `wp_check_password()':
function wp_check_password($password, $hash, $user_id = '') {
global $wp_hasher;
// Dacă hash-ul este încă md5...
if ( strlen($hash) <= 32 ) {
$check = ( $hash == md5($password) );
if ( $check && $user_id ) {
// Regenerează hash-ul folosind noul sistem
wp_set_password($password, $user_id);
$hash = wp_hash_password($password);
}
return apply_filters('check_password', $check, $password, $hash, $user_id);
}
// Dacă hash-ul stocat este mai lung decât un MD5, presupunem
// noul stil de hash portabil phpass
if ( empty($wp_hasher) ) {
require_once ( ABSPATH . 'wp-includes/class-phpass.php');
// Implicit, folosește hash-ul portabil din phpass
$wp_hasher = new PasswordHash(8, TRUE);
}
$check = $wp_hasher->CheckPassword($password, $hash);
return apply_filters('check_password', $check, $password, $hash, $user_id);
}
În primul rând, WordPress verifică dacă parola hashată a utilizatorului folosește încă vechiul sistem MD5 pentru securitate. Acest lucru este pentru a păstra compatibilitatea înapoi la actualizări. Dacă parola este MD5, atunci WordPress o va înlocui automat cu un nou hash folosind noul sistem (apelul la wp_set_password()
). Dacă nu este MD5, atunci WP trece la noul sistem de hashing.
Mai întâi, includem Portable PHP Hashing Framework (deja menționat de @John Watson într-un alt răspuns) și creăm o instanță a acestuia, stocând-o în variabila globală $wp_hasher
.
Apoi trecem parola în text simplu și hash-ul pentru a o verifica, folosind metoda CheckPassword()
a bibliotecii.
Dacă doriți să folosiți acest lucru într-o bibliotecă externă, va trebui mai întâi să include
/require
biblioteca, apoi să o instanțiați, apoi să transmiteți parola în text simplu și hash-ul acesteia. Deci niște pseudo-cod netestat...
function validate_password( $plaintext, $hash ) {
require_once( 'class-phpass.php' );
$hasher = new PasswordHash(8, TRUE);
return $hasher->CheckPassword( $plaintext, $hash );
}
