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. 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
  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. 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. 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. 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