IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

MD5( str_len>32) ?


Sujet :

Langage PHP

  1. #1
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut MD5( str_len>32) ?
    Bonjour,

    Je voudrais générer une emprunte d'un gros string, dans le genre HASH, MD5, etc.. mon problème c'est que j'ai remarqué qu'en faisant un MD5 de long string, celui-ci avait souvent la même valeur probablement car mon long string commence souvent par la même valeur et que MD5 ne doit probablement prendre que les 32 (??) premiers caractères de mon string en compte.

    Hélas sur la page http://php.net/manual/fr/function.md5.php il est précisé que l'ouput(return) était un string de 32 caractères mais rien n'indique une longeur max pour l'input. (args[0])

    Y a-t'il une autre méthodes d'empruntes HASH, CRYPT, .... qui prendrait tout mon string en compte ? Ou une autre solutions ?


    Plus de détails :

    Le but étant de regarder rapidement si mon "gros string" est potentiellement déjà en base de donnée en ne comparant qu'une emprunte de celui-ci.


    Je stock en base de donnée un "gros string de data" COMPRESS -> BLOB auquel j'associe qqes valeurs clés lié à son contenu.

    Le problème étant qu'aucune valeur ne détermine l'unicité de mon "gros string" j'ai donc besoin de TOUT recomparer avant de l'insérer s'il n'existe pas encore, et comme je n'ai pas réussi à mettre mon champs "BLOB" en "unique" dans mysql, j'ai pensé mettre une emprunte de mon "gros string" en unique (associé à qqes valeurs clés pour éviter trop de collisions )


    Merci d'avance pour votre aide.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    md5 n'est pas tiptop oui faut bien l'admettre.
    As-tu essayé avec sha1 ou sha2 ?

    Après quelque soit le hash tu ne peux garantir l'unicité...
    Pourquoi ? Parce qu'un hash n'est pas bijectif, donc il n'est pas unique !

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  3. #3
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par transgohan Voir le message
    md5 n'est pas tiptop oui faut bien l'admettre.
    As-tu essayé avec sha1 ou sha2 ?

    Après quelque soit le hash tu ne peux garantir l'unicité...
    Pourquoi ? Parce qu'un hash n'est pas bijectif, donc il n'est pas unique !
    Oups, après tests, le problème ne venait pas de là (je ne suis pas encore très à l'aise avec php / mysql) mais d'un implode(array) contenant un string avec \" qui ne renvoyait que la première partie de mon array(json).

    J'ai donc fait un json_encode au lieu du implode et je pense que ça va fonctionner. :-)

    Je sais que le md5 n'est pas bijectif et qu'il peut donc y avoir des "doubles", mais le probabilité est infime et j'ajoute d'autres données qui fait qu'a mon avis aucun double n'existera jamais durant l'existence de mon site. (enfin ces données en question n'étant pas capitales, je peux me permettre au pire de perdre un double sur la vie de mon site).

    Merci en tout cas.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  4. #4
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    En fait pas tellement... Plus la chaîne hashée est longue plus il y a de chance qu'elle ressemble à une autre longue chaîne hashée.
    Faudrait que je retrouve l'article du cryptographe qui avait écrit sur ça, c'était bien intéressant.

    Actuellement l'algo md5 est utilisé pour les mots de passe (bien que de moins en moins et heureusement) ou bien pour vérifier l'état d'un fichier.
    Donc en majorité c'est pour de petites chaînes ou bien pour de grandes chaînes mais qui ne doivent pas différer de beaucoup de l'originale et donc qui donnent très peu de chance d'obtenir un hash semblable. Contrairement à deux très longues chaînes totalement différentes.

    Bref, plus la chaîne est grande plus on a de probabilité d'obtenir un hash semblable à une autre grande chaîne hashée.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  5. #5
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par transgohan Voir le message
    En fait pas tellement... Plus la chaîne hashée est longue plus il y a de chance qu'elle ressemble à une autre longue chaîne hashée.
    Faudrait que je retrouve l'article du cryptographe qui avait écrit sur ça, c'était bien intéressant.

    Actuellement l'algo md5 est utilisé pour les mots de passe (bien que de moins en moins et heureusement) ou bien pour vérifier l'état d'un fichier.
    Donc en majorité c'est pour de petites chaînes ou bien pour de grandes chaînes mais qui ne doivent pas différer de beaucoup de l'originale et donc qui donnent très peu de chance d'obtenir un hash semblable. Contrairement à deux très longues chaînes totalement différentes.

    Bref, plus la chaîne est grande plus on a de probabilité d'obtenir un hash semblable à une autre grande chaîne hashée.
    Oui mais pour mon cas, ça devrait le faire, des utilisateurs me rapportait des fichiers non sauvegardé, et plus d'un md5 semblable me paraissait totalement impossible, et pour cause, leurs fiche de data était tronqué rapidement par mon md5(implode(array)) et comme beaucoup commençait pas le même début, ça générait un md5 de la même chaine et donc ça empêchait ma sauvegarde pour cause de duplication.

    Pour info, le "string" que je hash (une partie de mon fichier user en fait) fait aux environs de 5.000 caractères de moyenne. Pas économie de base de de donnée je préfère ne stocker que 32 caractères pour garantir l'unicité de ce fichier au risque d'en perdre un sur plusieurs millions au md5 semblable.


    Tiens, sinon une question aux experts du md5, il n'existe pas des règles du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF md5($string)==md5($string2) 
    AND md5($string+$uneLettre)==md5($string2+$uneLettre)
    THEN $string == $string2
    ?

    Si un string donne un md5 et qu'un autre string donne le même md5, si les 2 strings ajouté d'un caractère ont à nouveau le même md5, alors ces 2 strings sont obligatoirement les même. Existe t'il des règles du genre pour les md5 ?
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  6. #6
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Oui forcement et pas forcement vu qu'avec un peu de malchance cela peut ne pas être vrai (aucune bijection) pour un cas sur X.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SHA1 ou MD5 en ASP ?
    Par bigsister dans le forum ASP
    Réponses: 3
    Dernier message: 01/02/2005, 18h00
  2. [MASM32] Comment utiliser md5()
    Par sefo dans le forum x86 32-bits / 64-bits
    Réponses: 14
    Dernier message: 13/12/2004, 01h29
  3. [C#] A propos de MD5
    Par ensisoft dans le forum ASP.NET
    Réponses: 7
    Dernier message: 09/03/2004, 22h15
  4. C# Socket MD5
    Par borgfabr dans le forum Développement
    Réponses: 4
    Dernier message: 08/03/2004, 10h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo