Fonction: chaîne en numérique

teuss -  
sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour Tout le monde et Merci d'avance pour votre soutien

Je cherche un algo qui me permet à partir d'une chaîne de caractères d'obtenir un numérique sachant que deux chaînes ou caractères différents ne puissent pas avoir le même résultat. En résumé une fonction de hachage de la forme hacher (chaine) --> nombre

Merci

5 réponses

  1. TuXor Messages postés 97 Statut Membre 25
     
    Salut,

    tu peux essayer de concaténer les valeurs ASCII de tes caractères, et ainsi former des nombres qui soit différants pour chaque chaîne.

    Tu devrais avoir plus de détarils si tu en donnais plus (de détails) sur le langage que tu utilise, et sur le reste de ton projet.

    En espérant que ça puisse t'aider, bon courage.
    0
  2. teuss
     
    Bonjour M. TuXor

    Merci pour votre réponse

    Je pense que la concaténation du code Ascii ne règle pas le problème car on peut avoir la concaténation de deux code ascii qui est égale au code ascii d'un caractère

    Merci
    0
  3. random Messages postés 1612 Statut Membre 155
     
    le problème est la taille du nombre ainsi défini car on peut toujours
    écrire 097 au lieu de 97 ou a
    si je code a=1 et z =26
    pour coder un caractère il me faut 26
    pour le suivant 26*26
    pour une chaîne courte
    genre longtemps je me suis couché de bonne heure
    on arrive ainsi à 1.52743E+55
    et encore je n'ai pas utilisé les accents
    bien évidemment l'idéal serait d'utiliser une base 27
    avec une fonction de conversion et une fonction de réversion
    ainsi la taille de la cible serait inférieure à celle de la source
    c'est juste une idée comme ca
    0
    1. teuss
       
      Bonjour Random

      C'est intéressant ce que tu dis. Est ce que tu peux me donner plus de détails sur l'utilisation de cette base 27 avec quelques exemple si possibles

      Merci beaucoup
      0
  4. random Messages postés 1612 Statut Membre 155
     
    j'ai posté plus haut dans changement de base 36 deux exemples
    de fonction de conversion de base
    tu devrais les récupérer et procéder par essais
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    L'un des hashs les plus fiables actuellement, c'est SHA-1.

    Quasi-garanti de n'avoir jamais de collisions.
    La sortie fait 160 bits, ce qui est plus que les 32 bits que tu attend (entier).

    Solution plus simple: prendre une CRC32 (qui comme son nom l'indique, sort 32 bits, soit un entier).
    CRC32 est nettement plus susceptible de collisions que SHA-1.

    Regarde dans ton langage si ce genre de librairie est disponible, ou fais des recherches sur Google (on trouve de nombreuses librairies).
    0
    1. teuss
       
      Bonjour

      En fait ce dont j'ai bésoin c'est l'algo ou le princincipe utilisé dans ces différentes focntions .

      Cordialement
      0
      1. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684 > teuss
         
        En ce qui concerne CRC32, c'est basé sur les polynômes.

        Généralement les hashs sont des opérations chaînées de ou exclusif, rotation et transposition de bits.

        ==> voir les sources de ces algos:
        http://www.koders.com tape CRC32 SHA1 ou MD5 et choisis le langage de ton choix...
        0