bcrypt i losowo generowane sole

Więc eksperymentowałem z bcryptem. Mam klasę (pokazaną poniżej, którą dostałem odhttp://www.firedartstudios.com/articles/read/php-security-how-to-safely-store-your-passwords) w którym są 3 funkcje. Pierwszy z nich to wygenerowanie losowej Soli, drugi do wygenerowania skrótu za pomocą pierwszej wygenerowanej Soli, a ostatni to zweryfikowanie dostarczonego hasła poprzez porównanie go z hashem.

<?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

Jeśli na przykład wygeneruję hash z hasłem, otrzymam hashowane hasło, które odebrało randmonly wygenerowaną sól. Następnie, jeśli ponownie wprowadzę hasło i skorzystam z funkcji weryfikacji, otrzymam prawdę, że hasła są zgodne. Jeśli wprowadzę nieprawidłowe hasło, otrzymam fałszywe. Moje pytanie brzmi: jak to możliwe? A co z losowo generowaną solą? Dlaczego to nie ma żadnego skutku?

. $this->rounds . '

Jeśli na przykład wygeneruję hash z hasłem, otrzymam hashowane hasło, które odebrało randmonly wygenerowaną sól. Następnie, jeśli ponownie wprowadzę hasło i skorzystam z funkcji weryfikacji, otrzymam prawdę, że hasła są zgodne. Jeśli wprowadzę nieprawidłowe hasło, otrzymam fałszywe. Moje pytanie brzmi: jak to możliwe? A co z losowo generowaną solą? Dlaczego to nie ma żadnego skutku?

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

Jeśli na przykład wygeneruję hash z hasłem, otrzymam hashowane hasło, które odebrało randmonly wygenerowaną sól. Następnie, jeśli ponownie wprowadzę hasło i skorzystam z funkcji weryfikacji, otrzymam prawdę, że hasła są zgodne. Jeśli wprowadzę nieprawidłowe hasło, otrzymam fałszywe. Moje pytanie brzmi: jak to możliwe? A co z losowo generowaną solą? Dlaczego to nie ma żadnego skutku?

. $this->rounds . '

Jeśli na przykład wygeneruję hash z hasłem, otrzymam hashowane hasło, które odebrało randmonly wygenerowaną sól. Następnie, jeśli ponownie wprowadzę hasło i skorzystam z funkcji weryfikacji, otrzymam prawdę, że hasła są zgodne. Jeśli wprowadzę nieprawidłowe hasło, otrzymam fałszywe. Moje pytanie brzmi: jak to możliwe? A co z losowo generowaną solą? Dlaczego to nie ma żadnego skutku?

. $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); ?>

Jeśli na przykład wygeneruję hash z hasłem, otrzymam hashowane hasło, które odebrało randmonly wygenerowaną sól. Następnie, jeśli ponownie wprowadzę hasło i skorzystam z funkcji weryfikacji, otrzymam prawdę, że hasła są zgodne. Jeśli wprowadzę nieprawidłowe hasło, otrzymam fałszywe. Moje pytanie brzmi: jak to możliwe? A co z losowo generowaną solą? Dlaczego to nie ma żadnego skutku?

questionAnswers(1)

yourAnswerToTheQuestion