Voglio usare Blowfish hashing to hash password.
crypt()
non lo support nelle versioni di PHP precedenti alla 5.3
La mia versione PHP è 5.2.14. Come posso usare l'hashing Blowfish? Posso usare invece Crypt_Blowfish
di PEAR?
PEAR's Crypt_Blowfish è pensato per sostituire l'estensione MCrypt di PHP: è uno schema di crittografia a due vie , non per l'hashing. Mentre bcrypt è basato su Blowfish, non è la stessa cosa. Confusamente, CRYPT_BLOWFISH di PHP 5.3.0 è un algorithm di hashing.
C'è un motivo per cui l'aggiornamento a PHP 5.3.0+ non sarebbe ansible? Questo non è qualcosa che vuoi provare a implementare te stesso. Se puoi, phpass è un ottimo modo per fare l'hashing delle password basato su bcrypt in modo sicuro. Se non è assolutamente ansible eseguire l'aggiornamento, phpass ricade su schemi di hashing più vecchi (ma è ancora più sicuro del semplice MD5, ecc.).
Se per qualche motivo è ansible installare Suhosin ma non aggiornare PHP, ciò aggiungerebbe il supporto CRYPT_BLOWFISH.
Per assicurarti che attualmente non sia installato CRYPT_BLOWFISH, prova quanto segue:
echo (CRYPT_BLOWFISH === 1) ? 'CRYPT_BLOWFISH is enabled!' : 'CRYPT_BLOWFISH is not available';
Il pacchetto Crypt_Blowfish di PEAR fornisce la crittografia blowfish utilizzando l'estensione mcrypt, se disponibile, e se non implementa l'algorithm blowfish in modo nativo in php. Non ricorre all'utilizzo di altre forms di crittografia.
Non esiste una documentazione "scritta a mano" per il pacchetto, tuttavia esiste una documentazione API generata automaticamente ricavata dalle annotazioni nel pacchetto stesso.
Questo è il modo in cui lo uso per crittografare:
$bf = Crypt_Blowfish::factory('ecb', null, null, CRYPT_BLOWFISH_PHP); $iv = 'abc123+='; $key = BLOWFISH_KEY; $bf->setKey($key, $iv); $encrypted = bin2hex($bf->encrypt($password));
E per decifrare:
$bf = Crypt_Blowfish::factory('ecb', null, null, CRYPT_BLOWFISH_PHP); $iv = 'abc123+='; $key = BLOWFISH_KEY; $bf->setKey($key, $iv); $decrypted = trim($bf->decrypt(hex2bin($password)));
Dove BLOWFISH_KEY è una costante che ho definito altrove nel codice.
In questi esempi utilizzo esplicitamente l'implementazione di PHP.
Se volessi che Crypt_Blowfish decidesse quale motore usare, cioè per determinare se può usare l'estensione mcrypt se è disponibile (e altrimenti usa l'implementazione php), cambierei con CRYPT_BLOWFISH_AUTO. Per utilizzare esplicitamente l'estensione mcrypt, specifica CRYPT_BLOWFISH_MCRYPT.