E' vero, gli $iv non sono gli stessi, infatti vengono generati a random e cambiano ogni volta,
per cui succedeva che quando cercavo di decrittare una password utilizzavo un $iv diverso da quello originale, e questo non poteva funzionare.
La soluzione che ho trovato è stata quella di memorizzare nel database, oltre alla password, anche il vettore di inizializzazione originale opportunamente codificato in base64, in maniera poi di recuperarlo, decodificarlo e utilizzarlo per la decrittazione al momento del login.
Un'altra cosa importante: quando si decritta occorre utilizzare anche la funzione trim, altrimenti l'esito del confronto delle password è negativo!
$stored_password = trim(mcrypt_decrypt($cipher, $key, $data, $mode, $iv));
if ($stored_password === $password) { return true; }
Missione compiuta quindi!
grazie per l'aiuto badaze!![]()