Hashing PHP Bcrypt

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.