hashed_password?

Derzeit arbeite ich an einer API für ein Kundencenter. Dabei habe ich folgenden Code vor mir:

function set_password($plaintext)
{

    $this->hashed_password = $this->hash_password($plaintext);
}
private function hash_password($password)
{
    $salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
    $hash = hash('sha256', $salt . $password);
    
    return $salt . $hash;
}

private function validate_password($password)
{
    $salt = substr($this->hashed_password, 0, 64);
    $hash = substr($this->hashed_password, 64, 64);
    
    $password_hash = hash('sha256', $salt . $password);
    
    return $password_hash == $hash;
}

Jetzt bin ich mir nicht wirklich sicher welche Variable jetzt das „verschlüsselte“ Passwort enthält. Den eigentlichen Programmierer kann ich leider nicht mehr fragen, da der Support leider eingestellt wurde.

Über Hilfe bin ich echt dankbar.

Hi,

die Variable die das Passwort enthalten sollte ist $password_hash, jedoch ist das nicht das Passwort in Plaintext sondern ein sha256 des Plaintextpasswords, der mit dem gespeicherten (Passwort) salted hash verglichen wird.

Wenn möglich, solltest du versuchen die Logik zu ändern, da mcrypt seit 5.6 deprecated ist und in php > 7.1 entfernt werden wird. Ab php 5.5 ist password_hash und …verify verfügbar, nutze das.

Du müsstest lediglich bei einem Login der User auf eine obligatorisches „Reset Password“ führen und die Eingabe (am besten two factor method) mit password_hash speichern -> user_has_reset_password = true und zukünftig mit password_verify zu validieren.

Gruß XXD