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 :

Comparaison avec checksum(crc)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Par défaut Comparaison avec checksum(crc)
    salut tt le monde, bon je désire comparer 2 fichiers en utilisant leur checksum.
    Est ce que quelqu'un pourrait m'aider par un bout de code.
    Merci

  2. #2
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    soit tu veux implementer toi meme ton CRC et je te conseille d'etudier la thorie relative, soit tu utilise une lib deja faites...

    Dans tout les cas tu trouveras plein d'info sur wikipedia (y.c. des sources)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Par défaut
    Salut,

    Moi je te déconseille d'utiliser un crc 32bit pour comparer des fichiers car il y a énormément de collisions (2 fichiers diff = même crc)
    Tu risque d'avoir de mauvaises surprises.
    Le hashage MD5 est beaucoup plus fiable et disponible dans le framework. Et pour encore plus de fiablilité il y a SHA.

    a+

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par xenozephyr Voir le message
    Salut,

    Moi je te déconseille d'utiliser un crc 32bit pour comparer des fichiers car il y a énormément de collisions (2 fichiers diff = même crc)
    Tu risque d'avoir de mauvaises surprises.
    Le hashage MD5 est beaucoup plus fiable et disponible dans le framework. Et pour encore plus de fiablilité il y a SHA.

    a+
    +1
    voir la classe MD5CryproServiceProvider

  5. #5
    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
    je désire comparer 2 fichiers en utilisant leur checksum.
    Est ce que quelqu'un pourrait m'aider par un bout de code.
    En dehors d'un exercice imposé ou de programmes de synchro entre 2 machines, la comparaison effective me parait aussi simple/rapide et évite tous les cas de collision (même checksum, fichiers différents).

    En fait, seule une différence de checksum est significative : 2 fichiers avec le même checksum pouvant être (rarement) différents.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Par défaut
    Avec un peu de recherche j'ai trouvé du code en C que j'ai porté vite fait en C#.
    J'ai besoins d'environ 50sec pour faire la somme sur un fichier de 1Go

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    static UInt32 CheckSum32bits(Byte[] bytes)
            {
                if (bytes.Length < 4) return (0);
     
                UInt32 result = 0;
                UInt32 quotient = 0x04c11db7;
                Byte octet = 0;
     
                result = (UInt32)(bytes[0] << 24);
                result |= (UInt32)(bytes[1] << 16);
                result |= (UInt32)(bytes[2] << 8);
                result |= bytes[3];
                result = ~result;
     
                for (Int32 i = 4; i < bytes.Length; ++i)
                {
                    octet = bytes[i];
                    for (Int32 j = 0; j < 8; ++j)
                    {
                        if ((result & 0x80000000) == 0)
                            result = (result << 1) ^ quotient ^ (UInt32)(octet >> 7);
                        else
                            result = (result << 1) ^ (UInt32)(octet >> 7);
                        octet <<= 1;
                    }
                }
                return (~result);
            }

  7. #7
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par Graffito Voir le message
    En dehors d'un exercice imposé ou de programmes de synchro entre 2 machines, la comparaison effective me parait aussi simple/rapide et évite tous les cas de collision (même checksum, fichiers différents).
    En fait, la méthode de comparaison directe est plus efficace qu'un checksum si ce dernier n'est pas réutilisé. Dans le cas d'archives alors on calcule une seule fois le checksum et après on a terminé. Si par contre c'est une comparaison ponctuelle vaut mieux comparer directement.
    Après, on peut toujours faire en sorte que si on trouve deux checksums identiques, rebasculer vers une comparaison directe pour éliminer les doutes possibles.

Discussions similaires

  1. [SQL 2000] Comparaison avec NULL
    Par Yad dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 20/12/2006, 16h50
  2. Comparaison avec BSTR
    Par Sarkou dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 17/11/2006, 15h38
  3. [Oracle] type date: comparaison avec l'année en cours
    Par zchallal dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/06/2006, 07h39
  4. comparaison avec strcmp
    Par je®ome dans le forum C
    Réponses: 9
    Dernier message: 23/05/2006, 18h09
  5. comparaison avec substring
    Par tidan dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/01/2005, 17h13

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