Per poter utilizzare l'algoritmo scrypt è necessario installare questa estensione di PHP
in questa pagina sono disponibili diverse versioni, ad esempio se stiamo lavorando in un ambiente di test con SO Windows 10 possiamo scaricare la versione più adatta alle nostre esigenze al seguente link
pecl.php.net/package/scrypt/1.4.2/windows
in particolare per sceglere la versione giusta dobbiamo sapere la versione di PHP installata, 'Architecture' e 'Thread Safety', queste informazioni si possono ottenere tramite la funzione phpinfo(), nel mio caso uso la seguente versione Thread Safe (TS) x86
poichè Architecture è uguale a x86, Thread Safety è uguale a enabled, e la versione di PHP è la 7.1.
Adesso che abbiamo scaricato il pacchetto adatto, estraiamo i file della cartella compressa, e i passaggi successivi sono:
- copiare il file php_scrypt.dll nella cartella ext delle estensioni di PHP (es. C:\xampp\php\ext)
- aggiungere al file php.ini la seguente stringa extension=php_scrypt.dll
Nel file .zip dell' estensione scrypt (php_scrypt-1.4.2-7.1-ts-vc14-x86.zip) come è possibile notare vi è un file scrypt.php che contiene una classe astratta Password, useremo questa classe per le nostre operazioni sulle password, fra l'altro è possibile consultare il repository completo al seguente link
github.com/DomBlack/php-scrypt
Creiamo una classe che estenda la classe Password
Codice PHP
<?php
class Scrypt extends Password
{}
in questo modo possiamo utilizzare tutti i metodi disponibili nella classe Password, in particolare usiamo il metodo hash per generare l'hash che verrà memorizzato nel database, e il metodo check per verificare la validità della password
Codice PHP
<?php
$salt= random_bytes(32);
$password = "secret";
$Scrypt = new Scrypt();
$hash = $Scrypt->hash($password , $salt, 16384, 8, 1);
$password è la password, $salt è un valore casuale generato tramite la funzione random_bytes() di PHP, 16384 è il parametro sul costo in termini di CPU, 8 è il parametro del costo in termini di memoria RAM, 1 è il parametro sulla parallelizzazione dell'algoritmo, il risultato della variabile $hash è una stringa simile a questa
16384$8$1$cBPJ2rQueaa6/vZq3UbZeUbcabMNpRi/4cMrkr0PwDw=$afb87e42bc3fce3ade860f334b6f5a7bea8b549239dbca1e2998aeb8fcfe43be
per verificare la validità della password usiamo il metodo check
Codice PHP
<?php
//.......
$check = $Scrypt->check($password,$hash);
se la variabile $check è un valore TRUE la pasword è corretta, se FALSE la password non è corretta.