OVH Cloud OVH Cloud

fonction crypt() Bizarre !!!

5 réponses
Avatar
laurent sturm
Bonjour,

J'utilise la fonction crypt() pour crypter un passport et l'enregister dans
ma base de données.

Mais lorsque j'utilise le code suivant lors de l'autentification:

$SQL = "SELECT * FROM user WHERE id='moi' ";
$rows = mysql_query($SQL);

$row = mysql_fletch_assoc($rows) // $rows ne contient qu'un enregistrement

echo $row['PASS'];
echo crypt($_POST['pass'], $row['PASS']);

j'obtient :

$1$UO4.N70.$FXfEOmbn9KOxDqpKOSI5
$1$UO4.N70.$FXfEOmbn9KOxDqpKOSI56.

je suis dans l'obligation de coder:

if ( $row['PASS'] === substr(crypt($_POST['pass'],$row['PASS']),0,32)) )
{
// blabla
}

pour avoir un test valide sur les passports.

A quoi est dû cette bizarrerie ???

Merci

@+

5 réponses

Avatar
Pascal (Collectours)
laurent sturm wrote:

Bonjour,

J'utilise la fonction crypt() pour crypter un passport et l'enregister
enregistrement

echo $row['PASS'];
echo crypt($_POST['pass'], $row['PASS']);
[....]

Bonjour,
relisez la description de la fonction crypt à
http://fr.php.net/manual/fr/function.crypt.php
string crypt ( string str [, string salt])

Cdlt
Pascal

Avatar
FAb
"Pascal (Collectours)" writes:

laurent sturm wrote:

Bonjour,

J'utilise la fonction crypt() pour crypter un passport et l'enregister
enregistrement

echo $row['PASS'];
echo crypt($_POST['pass'], $row['PASS']);
[....]

Bonjour,
relisez la description de la fonction crypt à
http://fr.php.net/manual/fr/function.crypt.php
string crypt ( string str [, string salt])


Noi je pencherais pour une limitation dans la base de donnée de $row['PASS'] à
32 char.


V'là.
FAb


Avatar
Pascal (Collectours)
FAb wrote:

"Pascal (Collectours)" writes:

laurent sturm wrote:

Bonjour,

J'utilise la fonction crypt() pour crypter un passport et l'enregister
enregistrement

echo $row['PASS'];
echo crypt($_POST['pass'], $row['PASS']);
[....]

Bonjour,
relisez la description de la fonction crypt à
http://fr.php.net/manual/fr/function.crypt.php
string crypt ( string str [, string salt])


Noi je pencherais pour une limitation dans la base de donnée de
$row['PASS'] à 32 char.
Bonjour

il faut mieux lire, je la refais:
dans le post original, l'auteur nous dit:
if ( $row['PASS'] === substr( crypt($_POST['pass'],$row['PASS']),0,32) ) )
{
 // blabla
}
Regardez bien les paramètres de son appel à crypt,
puis regardez la doc (que j'ai citée),
et rendez-vous alors compte que ce n'est pas comme ça que l'on utilise la
fonction crypt.
Cordialement
Pascal



Avatar
laurent sturm
Salut,

Je pense que tu fais une erreur de jugement.
Voila un bout de code extrait du livre Php 5 Avancé, et
c'est sur de ce bout de code que je me suis inspiré.

<extrait livre>
La première phase est de chiffrer le mot de passe soumis par l'utilisateur
lors de son inscription:

//Stockage du mot de passe initial
$hachage_stocke = crypt($pass_initial)

(Pour ma part je le stocke dans un champ (varchar(32)) d'une table USER .)

Lorsque l'utilisateur revient et souhaite s'identifier, on rècupére le hash
stocké.
Cette ancienne chaîne crytée sert de paramétre pour chiffrer le nouveau mot
de passe
(afin que les deux chaine aléatoires soient les mêmes). Il suffit alors de
comparer
l'ancienne chaine cryptée et la nouvelle. Si elle sont identique, c'est que
le mot de passe est bon:

//récupération du mot de passe fournie par l'utilisateur
$pass_fourni = $_REQUEST['password'];
//on vérifie que le mot de passe est correct
if($hachage_stocke == crypt($pass_fourni, $hachage_stocke))
{
echo "mot de passe valide";
}else{
echo "mot de passe invalide";
}

</extrait livre>

Mon probleme c'est que je suis obligé de coder:
if($hachage_stocke == substr(crypt($pass_fourni, $hachage_stocke),0,32))
pour que mon code soit valide.

voila @+
Avatar
FAb
"laurent sturm" writes:

Salut,

<extrait livre>


[...]
(Pour ma part je le stocke dans un champ (varchar(32)) d'une table USER .)


Bizarre cette limitation à 32... Ça augmente la probabilité de collision sur les
hashes.

//on vérifie que le mot de passe est correct
if($hachage_stocke == crypt($pass_fourni, $hachage_stocke))


le hash stocké fait au max 32 char, pas celui qui est calculé.

[...]

Mon probleme c'est que je suis obligé de coder:
if($hachage_stocke == substr(crypt($pass_fourni, $hachage_stocke),0,32))


Normal.

pour que mon code soit valide.



FAb