Fonction: chaîne en numérique

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. 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
    1. 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
      1. 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. 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
      2. 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
        1. Modérateur
          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. Bonjour

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

            Cordialement
            0
          2. Modérateur
            @teussEn 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