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

C Discussion :

Checksum md4 (dur)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Checksum md4 (dur)
    Salut a tous,

    Après les signaux, j'ai maintenant un 2eme problème!
    Je dois réaliser un checksum (ou somme de contrôle) en gros un programme capable de calculer un checksum pour un message de longueur arbitraire.

    Je peux vous envoyé le sujet par mp... donc si quelqu'un connais bien ce truc, une aide est apprécié, je vois même pas comment commencer!

    Sinon que dire de plus, si ce n'est merci de m'avoir lu et merci d'avance.
    Dernière modification par ok.Idriss ; 15/06/2013 à 15h40. Motif: restauration

  2. #2
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    1) S'informer : qu'est-ce que le MD4 "en vitesse" ?
    Wikipedia : MD4

    2) Réfléchir au problème... tu vas devoir prendre en entrée... un fichier... ou des octets.... et en faire une somme...
    Comment travailler avec cela ?

    3) Regarder en "détails" MD4, et si possible avec des dessins !
    RFC1320 (full texte)
    Wikipedia EN MD4 (contient un beau schéma compréhensible)

    4) Choisir les bonnes structures adaptées à ton niveau de développement !
    Personnellement, je ne suis pas un expert, quand j'ai recodé le DES en suivant la FIPS, j'ai fais au plus simple possible en restant scolaire !
    Un tableau d'int, dont chaque case est un bit, pour pouvoir très très facilement débugger.
    Au final, cela a fonctionné, mais évidemment, ça n'est pas à utiliser dans le monde réel.
    Tu peux donc utiliser un tableau d'int toi aussi pour démarrer.

    En analysant le problème, tu verras que tu prends des blocs de 128bits/16 octets en entrée et en sortie...
    Et certaines opérations sont sur des blocs de 32bits/4 octets.

    5) Résumer les fonctions que tu devras coder pour le "coeur de l'algorithme", les structures que le standard impose (généralement il y a des IV - Vecteurs d'Initialisations pré-remplis, donc tu devras les re-écrire dans tes sources pour les utiliser)

    6) Coder tout ça, faire des tests et du debug !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'envoie carrement l'étape 1:

    Étape 1. Ajout des octets de bourrage

    Créer une fonction « padding » qui permet à partir d’une chaine de caractères, de créer une nouvelle chaine de caractères en respectant les règles suivantes :

    Le message est "bourré" de façon à ce que sa longueur (en bits) soit congruente à 480, modulo 512. C'est à dire que le message est étendu de façon à ce qu'il soit à 32 bits près un multiple d'une longueur de 512 bits.

    exemple : si S = 4 alors on bourre 56 octets.
    exemple2 : si S = 127 alors on bourre 61 octets.

    Attention : !! Le bourrage est toujours effectué, même si la longueur du message est déjà congruente à 480, modulo 512. !!

    Le bourrage est effectué comme suit : le premier octet ajoute aura pour valeur entière 128. Si d'autres octets doivent être ajoutes, ils auront pour valeur entière 0 jusqu'au respect de la règle précédente.

    Pour résume: on bourre au moins un octet et au plus 64 octets sont ajoutés.

    Fin de l’étape 1.

  4. #4
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    OK...
    Alors :

    1) Je lis dans la RFC1320 :
    congruent to 448, modulo 512
    et pas 480 modulo 512.... inquiétant ton sujet du coup....

    2) Toujours dans la RFC1320 :
    Padding is performed as follows: a single "1" bit is appended to the message, and then "0" bits are appended so that the length in bits of the padded message becomes congruent to 448, modulo 512. In all, at least one bit and at most 512 bits are appended.
    Mais je crois que ton 128 sert justement à "simplifier" la manipulation des bits/octets via des chars plutôt que des << ou >>.
    (Bien garder à l'esprit que les fonctions cryptographiques sont évidemment designées pour être rapides... et faites directement en circuit imprimé ! Pas spécialement en code.... carte à puce toossa...)

    Bref, hormis la congruence que j'ai un petit peu oubliée (mais ça doit se googler et se retrouver), il n'y a pas de difficulté à priori...
    Si ?
    Où bloques-tu ?
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je veux pas faire l'autiste (c'est raté) mais oui je bloque... à vrai dire j'ai pas commençé, je cherche un peu sur internet pour me documenté mais voila.

    Surtout que j'ai un 2eme projet a rendre a la fin de la semaine, ce qui me bloque... enfin bon je suis un peu dans la mer**...

  6. #6
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Ouais je viens de lire l'autre topic....
    Hahaha...
    Fais gaffe tu te fais aider par un 'ta là, et tu risques d'avoir honte du coup

    Bref, je peux déjà te dire une chose : essaye d'écrire les prototypes des fonctions...
    Si tu comprends les prototypes, tu iras plus vite.

    Peux-tu m'écrire le prototype de ta fonction de padding, ou est-ce que tu bloques encore ?
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2007, 18h31
  2. Numéro de série du disque dur
    Par h_kamel dans le forum Assembleur
    Réponses: 8
    Dernier message: 21/05/2007, 11h28
  3. Récupèrer la liste des disques durs
    Par Tililian dans le forum C++Builder
    Réponses: 4
    Dernier message: 19/06/2003, 12h42
  4. Monter un disque dur USB
    Par Iced Earth dans le forum Matériel
    Réponses: 5
    Dernier message: 13/01/2003, 22h02
  5. Accès direct au disque dur
    Par Berdo dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/01/2003, 16h21

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