2011-07-28 2 views
1

Je veux utiliser Blowfish hacher au mot de passe de hachage.PHP Bcrypt hachage

crypt() ne prend pas en charge dans les versions PHP 5.3 avant

Ma version de PHP est 5.2.14. Comment puis-je utiliser le hachage Blowfish? Puis-je utiliser le Crypt_Blowfish de PEAR à la place?

+2

Le blowfish n'est-il pas utilisé pour le cryptage et non pour le hachage? – Manhim

+0

Il signifie que bcrypt est un schéma de dérivation de mot de passe utilisant certaines parties de Blowfish. –

+0

duplication possible de [Comment utilisez-vous bcrypt pour hachage des mots de passe en PHP?] (Http://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt-for-hashing-passwords-in-php) – derobert

Répondre

6

Crypt_Blowfish de PEAR est destiné à remplacer l'extension MCrypt de PHP - c'est un schéma de chiffrement bidirectionnel, pas pour le hachage. Alors que bcrypt est basé sur Blowfish, ce n'est pas la même chose. Confusingly, CRYPT_BLOWFISH de PHP 5.3.0 est un algorithme de hachage.

Existe-t-il une raison pour laquelle la mise à niveau vers PHP 5.3.0+ ne serait pas possible? Ce n'est pas quelque chose que vous voulez essayer de mettre en œuvre vous-même. Si vous le pouvez, phpass est un excellent moyen de faire un hachage de mot de passe basé sur bcrypt en toute sécurité. Si vous ne pouvez absolument pas mettre à niveau, phpass revient à des schémas de hachage plus anciens (mais il est encore plus sûr que MD5, etc).

Si pour une raison quelconque vous pouvez installer Suhosin mais pas mettre à jour PHP, cela ajouterait le support de CRYPT_BLOWFISH.

Pour vous assurer que vous ne disposent actuellement pas crypt_blowfish installé, procédez comme suit: package

echo (CRYPT_BLOWFISH === 1) ? 'CRYPT_BLOWFISH is enabled!' : 'CRYPT_BLOWFISH is not available'; 
+2

Pour clarifier ... la fonction php ['crypt()'] (http://www.php.net/manual/fr/function.crypt.php), qui peut être configurée pour utiliser le ['CRYPT_BLOWFISH' ] (http://www.php.net/manual/fr/function.crypt.php) méthode (telle que définie sur la page liée), est une fonction de hachage salée avec entre 4 et 31 itérations sur le hachage. Ce n'est PAS une fonction de cryptage bidirectionnelle. – eykanal

+0

Existe-t-il un didacticiel sur l'utilisation de Suhosin pour le hachage? – chnet

+0

@chnet Suhosin est un patch PHP - il fait juste quelques trucs qui aident à sécuriser PHP. Une de ces choses est d'ajouter le support de CRYPT_BLOWFISH avec la fonction 'crypt()' de PHP. Ce n'est pas quelque chose que vous utilisez pour écrire des applications. Si vous êtes sur un hébergement partagé, vous ne serez probablement pas en mesure de l'installer. –

3

Crypt_Blowfish de PEAR fournit le cryptage Blowfish en utilisant l'extension mcrypt si elle est disponible, sinon il met en oeuvre l'algorithme Blowfish nativement en php. Il ne revient pas à l'utilisation d'une autre forme de cryptage.

Il n'y a pas de documentation "manuscrite" pour le paquet, il y a auto-generated API documentation dérivé des annotations dans le paquet lui-même.

Voilà comment je l'utilise pour chiffrer:

$bf = Crypt_Blowfish::factory('ecb', null, null, CRYPT_BLOWFISH_PHP); 
$iv = 'abc123+=';              
$key = BLOWFISH_KEY;             
$bf->setKey($key, $iv);             
$encrypted = bin2hex($bf->encrypt($password));   

Et pour déchiffrer:

$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))); 

Où BLOWFISH_KEY est une constante que j'ai défini ailleurs dans le code.

Dans ces exemples, j'utilise explicitement l'implémentation de PHP. Si je voulais que Crypt_Blowfish décide quel moteur utiliser, c'est-à-dire pour déterminer s'il peut utiliser l'extension mcrypt si elle est disponible (et utilise autrement l'implémentation php), alors je changerais avec CRYPT_BLOWFISH_AUTO. Pour utiliser explicitement l'extension mcrypt, spécifiez CRYPT_BLOWFISH_MCRYPT.

Questions connexes