password_hash
funkcja
Hashuje hasło używając bcrypt lub argon2. Automatycznie generuje sól. Jedyna właściwa metoda przechowywania haseł w PHP — nigdy md5 ani sha1.
password_hash(string $password, string|int|null $algo = PASSWORD_DEFAULT, array $options = []): string
password_hash tworzy bezpieczny skrót (hash) podanego hasła. Automatycznie generuje losową sól i włącza ją do wyniku — nie musisz jej przechowywać osobno. Wynikowy ciąg zawiera algorytm, koszt, sól i hash w jednym. PASSWORD_DEFAULT wybiera bcrypt w PHP 8 i będzie automatycznie wskazywać na lepszy algorytm w przyszłych wersjach PHP.
Nigdy nie używaj md5(), sha1() ani innych ogólnych funkcji skrótu do haseł — są zbyt szybkie i podatne na ataki tęczowych tablic.
<?php
declare(strict_types=1);
// Hashowanie hasła przy rejestracji:
$haslo = 'SuperTajneHaslo99!';
$hashHasla = password_hash($haslo, PASSWORD_DEFAULT);
echo $hashHasla;
// wynik: $2y$12$... (60 znaków bcrypt — za każdym razem inny!)
// Ten sam ciąg wejściowy daje RÓŻNE hashe przy kolejnych wywołaniach:
$hash1 = password_hash($haslo, PASSWORD_DEFAULT);
$hash2 = password_hash($haslo, PASSWORD_DEFAULT);
var_dump($hash1 === $hash2); // wynik: bool(false)
// Sprawdzenie przez password_verify():
var_dump(password_verify($haslo, $hash1)); // wynik: bool(true)
// Zapis do bazy — potrzebujesz kolumny VARCHAR(255):
// INSERT INTO users (login, haslo_hash) VALUES (:login, :hash)