2010-02-10 13 views
4

D'abord, je vois que pour utiliser CRYPT_BLOWFISH, j'ai besoin d'utiliser un sel de 16 char à partir de $ 2a $. Cependant, le php.net documentation for crypt() indique que certains systèmes ne prennent pas en charge CRYPT_BLOWFISH. À quelle fréquence est-ce le cas?(PHP) Comment utiliser crypt() avec CRYPT_BLOWFISH?

Ensuite, à partir de leur exemple sur les docs, je vois que j'utilise crypt() comme suit:

<?php 
$password = crypt('mypassword'); // let the salt be automatically generated 

/* You should pass the entire results of crypt() as the salt for comparing a 
    password, to avoid problems when different hashing algorithms are used. (As 
    it says above, standard DES-based password hashing uses a 2-character salt, 
    but MD5-based hashing uses 12.) */ 
if (crypt($user_input, $password) == $password) { 
    echo "Password verified!"; 
} 
?> 

Pour utiliser crypt_blowfish, serait la seule chose que je dois modifier la première ligne pour faire c'est comme ça;

crypt('mypassword', '$2a$07$usesomesillystringforsalt$') 

puis le reste des lignes sont bien comme c'est?

Répondre

5

Pour PHP avant 5.3.0, crypt() utilisait la lib fournie par le système d'exploitation. Si vous utilisez une version antérieure, vous devez vérifier la documentation de votre système d'exploitation pour voir si elle est prise en charge (vérifiez la valeur de la constante CRYPT_BLOWFISH). Sinon, l'algorithme est implémenté dans l'extension mcrypt() pour PHP.

L'exemple que vous avez cité des documents ne semble pas beaucoup de sens:

$stored_password=fetch_password($user); 

    if (crypt($_REQUEST['password'],$stored_password)===$stored_password) { 
     // note that crypt automatically extracts the salt and alogrithm type 
     // from $stored_password 
     .... 

Vous ne devez spécifier le préfixe ($ 2a $) lors de la création du mot de passe.

HTH

C.

+0

oui, mais la seule question que je reste est: quand je crée le mot de passe, j'utilise la crypte ('mypassword', '2a $ $ 07 $ usesomesillystringforsalt $), non? où mon sel est en réalité une chaîne de 16 caractères générée aléatoirement? – sepiroth