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

Algorithmes et structures de données Discussion :

un algo de HASH ultra simple ?


Sujet :

Algorithmes et structures de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut un algo de HASH ultra simple ?
    Bonjour à tous,

    je suis à la recherche d'un algo (ou d'idée d'algos) pour signer un tableau de quelques octets (<128).

    Le problème : cet algo doit pouvoir tourner sur un tout petit micro-contrôleur 8b à 8 MHz, et donc n'utiliser que des opérations sur des bytes (si possible) avec pas trop de multiplications (et encore moins de divisions ou de float !!!)

    j'avais pensé à un truc tout bête genre une clef de 6 octets (6 octets, ça m'arrange) sur laquelle je XOR mes données, en pseudo-code/C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fonction calcule_signature( byte data[], byte len_data )
    {
      byte clef[6] = { ma clef secrète de 6 octets };
     
      for( i=0 ; i<len_data ; i++ )
      {
        clef[i%6] = clef[i%6] XOR data[i];
      }
     
      return clef;
    Ou un truc dans le genre ...

    Je ne cherche pas un algo hyper pointu, mais pas non plus un algo qui est cassé en 2 minutes avec un freeware trouvé sur le net ...

    Par avance, merci de vos lumières.

    [Edit] autre idée : un tableau de 256 octets aléatoires (en dur dans le code) qui me sert de germe pour la clef de 6 octets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    fonction calcule_signature( byte data[], byte len_data )
    {
      byte dico[256] = { dico aléatoire ... };
     
      byte clef[6];
     
      for( i=0 ; i<6 ; i++ )
      {
        clef[i] = dico[ data[i] ];
      }
     
      for( i=0 ; i<len_data ; i++ )
      {
        clef[i%6] = clef[i%6] XOR data[i];
      }
     
      return clef;
    C'est peut être déjà un poil mieux, non ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut
    NB: j'ai repensé à mon problème

    En fait, peu importe la taille de la clef, disons 16 octets max

  3. #3
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Un CRC16 :
    voir : http://dvsoft.developpez.com/Articles/CRC/

    Un CRC16 tout simple ici:
    http://coding.derkeiler.com/Archive/.../msg00256.html

    Et si on utilise un CRC faisant l'objet d'une norme, on peut éviter d'être craké trop facilement ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Crc_de_ma_chaine=CRC_Normé(ma_chaine)
    Crc_Final=Crc_Normé(ma_chaine+Crc_de_ma_chaine+Ma_Clé)

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Tu peux aussi utiliser le checksum (16 octets) de l'algo MD2. Et si ca ne suffit pas, calculer complètement le message digest MD2.

    http://tools.ietf.org/html/rfc1319
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut
    Merci à vous, ça a l'air bien tout ça !!!

    Je vais regarder et tester un peu pour avoir une idée du temps d'exécution sur mon "veau" et voir la taille du code que cela demande aussi ...

    J'espère pouvoir faire tenir tout ça dans les 256B de RAM !!! ( vive l'embarqué ! )

    ... encore quelques questions :

    à propos du Checksum du MD2 : il utilise une table de 256B (issue de PI), elle doit être conservée ou je peux la changer par une autre sans perdre en efficacité ?
    -> par exemple un tableau de 256 valeurs de 0 à 256, et ensuite je fais x permutations façon aléatoire.

    En tout cas, le MD2 me plait bien !!!

    Si ça passe pas, je me rabattrais sur un CRC plus simple .

    Grand merci à vous !

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Seb.26 Voir le message
    à propos du Checksum du MD2 : il utilise une table de 256B (issue de PI), elle doit être conservée ou je peux la changer par une autre sans perdre en efficacité ?
    -> par exemple un tableau de 256 valeurs de 0 à 256, et ensuite je fais x permutations façon aléatoire.
    A mon avis, le choix des décimales de PI ne doit pas être anodin. Donc autant rester avec les décimales de PI mais en faire une autre permutation aléatoire.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    A mon avis, le choix des décimales de PI ne doit pas être anodin...faire une autre permutation aléatoire (après le calcul du checksum).
    +1
    Ce type de tables correspond en général à des "constantes" pré-calculées en fonction de l'algorithme pour permettre une optimisation du calcul.
    Ainsi, des modifications de ces "constantes" pourraient être inopportunes.

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut
    Hello,

    sauf si j'ai rien compris, mais il me semble que le tableau ne contient pas les décimales de PI mais toutes les valeurs 0..255 ?!

    Les décimales de PI ont servies à faire les permutations dans le tableau (pour obtenir des permutations qui soient vraiment aléatoires)

    Mais c'est vrai que je peux déjà partir de ce tableau ci, et refaire des permutations dessus ... car même si mes permutations ne sont pas parfaites, la source étant considérée comme tel, le résultat le sera, non ?

    En fait, l'idée serait de ne calculer que le CRC du MD2, mais avec un tableau modifié (qui serait déjà un genre de clef secrète)

  9. #9
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Seb.26 Voir le message
    Hello,

    sauf si j'ai rien compris, mais il me semble que le tableau ne contient pas les décimales de PI mais toutes les valeurs 0..255 ?!

    Les décimales de PI ont servies à faire les permutations dans le tableau (pour obtenir des permutations qui soient vraiment aléatoires)
    Oui, tout a fait, tu as raison. C'est moi qui me suis gouré dans mes explications.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 183
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Oui, tout a fait, tu as raison. C'est moi qui me suis gouré dans mes explications.
    OK, je vais partir là dessus alors, merci bien.

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

Discussions similaires

  1. [XL-2003] 1 ligne Code Ultra simple
    Par bomaletoi dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/10/2010, 18h20
  2. Réponses: 5
    Dernier message: 20/05/2010, 18h08
  3. Demande d'aide pour élaborer un algo pour un pb simple mais long
    Par mougel dans le forum Algorithmes et structures de données
    Réponses: 127
    Dernier message: 23/11/2007, 09h52
  4. [SQL] Moteur de recherche ultra simple ?
    Par Jiraiya42 dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 12/10/2006, 18h03
  5. [Delphi] Cherche moteur 3D ultra simple à utiliser
    Par Matt2094 dans le forum Moteurs 3D
    Réponses: 3
    Dernier message: 22/05/2006, 09h17

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