|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Bonjour,
J'attribue un numéro de session aléatoire aux membres à l'instant où ils s'identifient. Pour ce faire je prend la moment de la connexion et je le crypte avec md5() : Code :
Que me suggérez-vous pour rendre encore plus aléatoire ce numéro de connexion ? Merci pour vos réponses.
__________________
C'est pas parce que j'ai tort que vous avez raison. |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Inscription : avril 2003 Messages : 3 286 ![]() |
tu n'aimes pas les sessionID générées par PHP ?
__________________
Tous mes tutoriels Pas de questions techniques par MP ni par e-mail, merci ! Prolog rules! |
|
|
00
|
|
|
#3 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
C'est pour un système anti vol de session en fait et là je crée un numéro de connexion qui me permet d'identifier le membre au travers d'une session sans faire passer des informations personnelles tels que l'id (qui lui reste toujours le même).
Ceci dit en effet pourquoi ne pas prendre l'id de session, mais je le récupère comment ? Je peux aussi le concaténer au time() et "md5iser" le tout. Genre : Code :
__________________
C'est pas parce que j'ai tort que vous avez raison. |
||
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() ![]() Inscription : avril 2003 Messages : 3 286 ![]() |
Citation:
__________________
Tous mes tutoriels Pas de questions techniques par MP ni par e-mail, merci ! Prolog rules! |
|
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Ouh là non, je vais allez me coucher moi, en fait je pige même plus mon script...
Lorsque les gens s'identifient je leur attribue un numéro de session comme ça : Code :
$numeroConnexion=md5(uniqid (rand())); Hu hu désolé (ça doit être suffisant le md5(), il y a peu de chance que ça m'en sorte deux similaire un jour quand même)
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|
|
00
|
|
|
#6 | |
|
Expert Confirmé
![]() ![]() Inscription : avril 2003 Messages : 3 286 ![]() |
Citation:
__________________
Tous mes tutoriels Pas de questions techniques par MP ni par e-mail, merci ! Prolog rules! |
|
|
|
00
|
|
|
#7 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Bon alors histoire de compliquer le problème et vu que l'on (je) ne connait pas la probabilité de sortir un md5() similaire pour deux membres, sachant qu'ils sont updatés à chaque nouvelle connexion...
Et sachant que mon "idée" que je reprend et qui est basé sur le time() est pas forcément lamentable dans la mesure ou j'ai un oeil fermé et un pied dans le lit : Code :
- Si le membre 1 se connecte à time() - Si je crée à ce moment là un md5() - Si je concatène les deux et que je repasse tout ça par md5() J'obtiens un md5(), ok. -Maintenant le membre 2 se connecte à un time différent() (ou le même d'ailleur, si vraiment on a pas de bol). - On recrée un md5() - On le concatène à son time() et on le repasse par md5() Au final, peut-on se retrouver avec le md5() du membre 1, ou est-ce impossible puisque le time() de connexion de 2 et son md5() concaténés sont à priori différent ? Sans rentrer dans les délires probabiliste, la question est plutot l'opération de concaténation du md5() avec le time() PLUS le repassage du tout par md5() annule-t'il l'effet certain de l'unicité du time() dans la mesure ou on a quand même pas de pot si deux membres s'identifient à la même seconde ?
__________________
C'est pas parce que j'ai tort que vous avez raison. |
||
|
|
00
|
|
|
#8 | |
|
Expert Confirmé
![]() ![]() Inscription : avril 2003 Messages : 3 286 ![]() |
Citation:
__________________
Tous mes tutoriels Pas de questions techniques par MP ni par e-mail, merci ! Prolog rules! |
|
|
|
00
|
|
|
#9 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Donc en fait tu réponds à l'édit que tu n'as sans doute pas eu le temps de lire et dans lequel je disais, je m'autocite :
Code :
Et je repasse le tout par md5(). Le time() peut être identique donc on peut avoir deux md5() différents. Mais l'id du membre est forcément unique, de même que le md5() qui en résulte. Donc en concaténant les deux on obtient une chaine qui ne peut être qu'unique. Idem pour md5() qui en résulte. ça vous parait juste ? **edit** c'est vraiement lourding ce système de scroll qui apparait lors des copier coller, les retours à la ligne ne se font pas.
__________________
C'est pas parce que j'ai tort que vous avez raison. |
||
|
|
00
|
|
|
#10 | ||
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Bon au final j'ai fait ça :
Code :
__________________
C'est pas parce que j'ai tort que vous avez raison. |
||
|
|
00
|
|
|
#11 | |
|
Expert Confirmé
![]() ![]() Inscription : avril 2003 Messages : 3 286 ![]() |
Citation:
__________________
Tous mes tutoriels Pas de questions techniques par MP ni par e-mail, merci ! Prolog rules! |
|
|
|
00
|
|
|
#12 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
A la base, le md5() d'un nombre x donnera toujours le même md5(x).
Donc dans ce cas on a : - un numéro time() T qui peut être le même pour plusieurs membres, mais qui ne resortira jamais par la suite. - Un id de membre I qui est toujours unique. - On concatène T.I ce qui nous donne un numéro TI unique qui ne pourra jamais ressortir car time() sera par la suite différent. - En lfaisant md5(TI) on obtient un md5() unique qui ne pourra jamais ressortir puisque forgé à partir d'un time n'existant plus. Il ne peut non plus être partagé entre deux membres se connectant pile à la même seconde, puisqu'ils ont des id différents, ce qui nous donne la encore un TI différent ne pouvant jamais donner le même md5(). Je crois que c'est bon. Mais en effet il faudrait faire tout le détail. Y'a un pro des maths dans le coin ?
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|
|
00
|
|
|
#13 | |
|
Expert Confirmé
![]() ![]() Inscription : avril 2003 Messages : 3 286 ![]() |
Citation:
__________________
Tous mes tutoriels Pas de questions techniques par MP ni par e-mail, merci ! Prolog rules! |
|
|
|
00
|
|
|
#14 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
des trous ?
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|
|
00
|
|
|
#15 | |
|
Expert Confirmé
![]() ![]() Inscription : avril 2003 Messages : 3 286 ![]() |
Citation:
__________________
Tous mes tutoriels Pas de questions techniques par MP ni par e-mail, merci ! Prolog rules! |
|
|
|
00
|
|
|
#16 | ||
|
Membre Expert
![]() Inscription : juillet 2004 Messages : 1 033 ![]() |
Citation:
Que tu les hashes avec MD5, et que le hash est le même. Préféres y sha1 si tu flippes tant que cela d'une collision. cf http://fr.wikipedia.org/wiki/MD5 Citation:
|
||
|
|
00
|
|
|
#17 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Et c'est quoi la différence d'utilisation en sha1 et md5() ? C'est simplement les 8 caractères de plus ?
Pourquoi tout le monde n'utilise pas sha1 à la place de md5() si sha1 est plus sur ?
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|
|
00
|
|
|
#18 | |
|
Expert Confirmé
![]() ![]() Inscription : avril 2003 Messages : 3 286 ![]() |
Citation:
Tant qu'à utiliser sha, autant prendre le 2, il paraît que le 1 a été factorisé... Ceci dit, si le risque de collision est moindre, il n'est pas nul. Il y a toujours des collisions, dans tous les algos de hash imaginables.
__________________
Tous mes tutoriels Pas de questions techniques par MP ni par e-mail, merci ! Prolog rules! |
|
|
|
00
|
|
|
#19 | |||
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
Citation:
genre donc : $id.md5(time); avec $id de la forme "0001", si tu peux avoir au maximum 9999 membre sur ton site. Comme ca : la premiere partie du nombre implique que ca sera unique pour chaque membre (pas de collision intermembre) La 2eme partie du nombre permet d'assurer l'unicité au niveau d'un membre (au cas ou il s'amuse a donner son login/pass a un ami et a se connecter au meme moment... deja vachement rare hein ;o)
__________________
PHP : Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production) Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error()); Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable. Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/ |
|||
|
|
00
|
|
|
#20 |
|
Membre éclairé
![]() Inscription : juillet 2005 Messages : 1 221 ![]() |
Parce que là le gars qui récupère ça a l'id du membre en clair si j'ai bien compris ton idée. Tu me diras il faudrait que le pirate le distingue dans la chaine mais tout de même.
**edit** Bon en fait concaténer un time() unique passé en md5() à un id unique passé en md5() à priori donnera une chaine de caractère absolument unique, ce qui n'est pas forcément le cas si on repasse cette chaine par md5() cette dernière opération pouvant réserver des surprises. Mais par contre une chaine de 64 caractères ça commence à faire long pour aller chercher dans la base le compte qui correspond au numéro de session.
__________________
C'est pas parce que j'ai tort que vous avez raison. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com