password_verify()
richiede due argomenti: una stringa di cui si desidera verificare se è la password corretta e il valore calcolato in precedenza con password_hash()
, che presumibilmente si è archiviato da qualche parte in un database o giù di lì.
Un'applicazione tipica potrebbe essere:
<?php
$hash = password_hash('my-secret', PASSWORD_DEFAULT);
// normally you would save the hash somewhere, but we'll just continue in this example
$check_a = 'other-secret';
$check_b = 'my-secret';
if (password_verify($check_a, $hash))
echo 'Check A was the original password: ' . $check_a;
if (password_verify($check_b, $hash))
echo 'Check B was the original password: ' . $check_b;
L'output sarà:
Check B was the original password: my-secret
Se vuoi ottenere la password originale da un hash calcolato da password_hash()
, dovrai provare tutte le possibilità - questo è ciò che mostra questo esempio. A causa dell'architettura di password_hash()
, trovare una password come questa richiederà molto tempo, quindi non ne vale la pena.
Nota anche, dal password_hash()
doc :
PASSWORD_DEFAULT
- Use the bcrypt algorithm (default as of PHP 5.5.0). Note that this constant is designed to change over time as new and stronger algorithms are added to PHP. For that reason, the length of the result from using this identifier can change over time. Therefore, it is recommended to store the result in a database column that can expand beyond 60 characters (255 characters would be a good choice).
L'algoritmo è progettato per cambiare nel tempo, in modo che rimanga sicuro, e trovare una password con la forza bruta non sarà possibile con i computer più veloci (presumendo, l'installazione di PHP sul server è aggiornata)
In ogni caso, un hash è a senso unico: non puoi girarlo. Puoi solo verificare una determinata password calcolando l'hash di quello e verificando se è la stessa.