bcrypt und zufällig erzeugte Salze

Also habe ich mit bcrypt experimentiert. Ich habe eine Klasse (siehe unten), von der ich eine bekommen habehttp://www.firedartstudios.com/articles/read/php-security-how-to-safely-store-your-passwords), in dem es 3 Funktionen gibt. Das erste ist das Erzeugen eines zufälligen Salt, das zweite das Erzeugen eines Hashs unter Verwendung des ersten erzeugten Salt und das letzte das Überprüfen des bereitgestellten Passworts durch Vergleichen mit dem Hash-Passwort.

<?php
/* Bcrypt Example */
class bcrypt {
    private $rounds;
    public function __construct($rounds = 12) {
        if(CRYPT_BLOWFISH != 1) {
            throw new Exception("Bcrypt is not supported on this server, please see the following to learn more: http://php.net/crypt");
        }
        $this->rounds = $rounds;
    }

    /* Gen Salt */
    public function genSalt() {
        /* openssl_random_pseudo_bytes(16) Fallback */
        $seed = '';
        for($i = 0; $i < 16; $i++) {
            $seed .= chr(mt_rand(0, 255));
        }
        /* GenSalt */
        $salt = substr(strtr(base64_encode($seed), '+', '.'), 0, 22);
        /* Return */
        return $salt;
    }

    /* Gen Hash */
    public function genHash($password) {
        /* Explain '$2y

Wenn ich jetzt zum Beispiel mit 'password' einen Hash generiere, erhalte ich ein Hash-Passwort, das das zufällig generierte Salt genommen hat. Wenn ich als Nächstes erneut 'password' eingebe und die Überprüfungsfunktion verwende, erhalte ich true, was bedeutet, dass die Passwörter übereinstimmen. Wenn ich ein falsches Passwort eingebe, werde ich falsch. Meine Frage ist, wie ist das möglich? Was ist mit dem zufällig erzeugten Salz? Wie kommt es, dass das keine Wirkung hat?

. $this->rounds . '

Wenn ich jetzt zum Beispiel mit 'password' einen Hash generiere, erhalte ich ein Hash-Passwort, das das zufällig generierte Salt genommen hat. Wenn ich als Nächstes erneut 'password' eingebe und die Überprüfungsfunktion verwende, erhalte ich true, was bedeutet, dass die Passwörter übereinstimmen. Wenn ich ein falsches Passwort eingebe, werde ich falsch. Meine Frage ist, wie ist das möglich? Was ist mit dem zufällig erzeugten Salz? Wie kommt es, dass das keine Wirkung hat?

*/ /* 2a selects bcrypt algorithm */ /* $this->rounds is the workload factor */ /* GenHash */ $hash = crypt($password, '$2y

Wenn ich jetzt zum Beispiel mit 'password' einen Hash generiere, erhalte ich ein Hash-Passwort, das das zufällig generierte Salt genommen hat. Wenn ich als Nächstes erneut 'password' eingebe und die Überprüfungsfunktion verwende, erhalte ich true, was bedeutet, dass die Passwörter übereinstimmen. Wenn ich ein falsches Passwort eingebe, werde ich falsch. Meine Frage ist, wie ist das möglich? Was ist mit dem zufällig erzeugten Salz? Wie kommt es, dass das keine Wirkung hat?

. $this->rounds . '

Wenn ich jetzt zum Beispiel mit 'password' einen Hash generiere, erhalte ich ein Hash-Passwort, das das zufällig generierte Salt genommen hat. Wenn ich als Nächstes erneut 'password' eingebe und die Überprüfungsfunktion verwende, erhalte ich true, was bedeutet, dass die Passwörter übereinstimmen. Wenn ich ein falsches Passwort eingebe, werde ich falsch. Meine Frage ist, wie ist das möglich? Was ist mit dem zufällig erzeugten Salz? Wie kommt es, dass das keine Wirkung hat?

. $this->genSalt()); /* Return */ return $hash; } /* Verify Password */ public function verify($password, $existingHash) { /* Hash new password with old hash */ $hash = crypt($password, $existingHash); /* Do Hashs match? */ if($hash === $existingHash) { return true; } else { return false; } } } /* Next the Usage */ /* Start Instance */ $bcrypt = new bcrypt(12); /* Two create a Hash you do */ echo 'Bcrypt Password: ' . $bcrypt->genHash('password'); /* Two verify a hash you do */ $HashFromDB = $bcrypt->genHash('password'); /* This is an example you would draw the hash from your db */ echo 'Verify Password: ' . $bcrypt->verify('password', $HashFromDB); ?>

Wenn ich jetzt zum Beispiel mit 'password' einen Hash generiere, erhalte ich ein Hash-Passwort, das das zufällig generierte Salt genommen hat. Wenn ich als Nächstes erneut 'password' eingebe und die Überprüfungsfunktion verwende, erhalte ich true, was bedeutet, dass die Passwörter übereinstimmen. Wenn ich ein falsches Passwort eingebe, werde ich falsch. Meine Frage ist, wie ist das möglich? Was ist mit dem zufällig erzeugten Salz? Wie kommt es, dass das keine Wirkung hat?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage