checksumme für dateien



  • Hallo PAD,

    hab da nochmal ne Frage dazu. In welchen Zeitabständen (vor jedem Backup?) macht ihr solch ein CRC Check und mit welchen Dateien (alle oder nur Verzeichnisse mit "Eigenen Dateien") ?

    Gruß WoWe



  • Die Arbeit hat weder mit Windows noch mit Backup zu tun.

    Wir benutzen es um zu überprüfen ob die auf einem lokalen PC geladene Version
    intakt ist und mit der im Netzwerk bereitgestellten Version der SW übereinstimmt.

    Überprüfung der Intaktheit, dient der Sicherstellung das unsere Produkte mit einer ungeänderten Version der TestSw geprüft werden.

    Überprüfung gegen Netzwerkversion, Sicherstellen das mit der neuesten zugelassenen Softeware getestet wird.



  • Hi,
    @PAD
    ich bekomme keinen CRC werte wie z.B. "5294c29a" sondern ich bekomme "16" zurück ;-(( was könnte ich falsch gemacht haben??
    Ich habe deinen Code in eine Klasse MyCRC gepankt aber an dem darf es ja nicht liegen oder??
    von result müsste man die fertige CRC32-Sum entgegenehemen dueren oder?? Was wird dann dann von der Function zurückgegeben ist nämlich das gleiche.

    Danke dir trotzdem fuer den super Code.

    mfg
    wdsl



  • @wdsl Da ich nicht weis was du wie gemacht hast, weis ich auch nicht was du wie falsch gemacht hast.

    Funktioniert den der C-Code???

    Wenn ja ist es eine Fehler in deiner C++ Umsetzung.



  • crc.cpp

    #include "crc.h"
    #include <dirent.h>
    #include <fstream.h>
    #include <system.hpp>
    
    #define FAIL 1
    #define PASS 0
    
    #define BUFFERLEN    8192 
    #define CRC32_DEFAULT_POLYNOMIAL 0x04c11db7L
    MyCRC::MyCRC(){
    }
    
    void  MyCRC::InitCrcCheckSum(unsigned long int *value)
    {
            *value = 0xFFFFFFFFL;
    
    }
    
    void MyCRC::GenCrcTable(unsigned long int value)
     // generate the table of CRC remainders for all possible bytes
    {
            register int i, j;
            register unsigned long CrcAccum;
            if (0l==value)
            value=CRC32_DEFAULT_POLYNOMIAL;
            for ( i = 0;    i < 256;  i++ )
            {
                    CrcAccum = ( (unsigned long) i << 24 );
                    for ( j = 0;  j < 8; j++ )
                    {
                            CrcAccum = (  CrcAccum & 0x80000000L )
                            ? ( ( CrcAccum << 1 ) ^ value)
                            : ( CrcAccum << 1 );
                    }
                    crc_table[i] = CrcAccum;
            }
    } 
    
    unsigned long int   MyCRC::CrcCheckSumC(char *tx_message,unsigned long int length, unsigned long int *value)
    {
            register unsigned long int i, j;
            register unsigned char count = 0;
    
            // update the CRC on the data block one byte at a time
            for ( j = 0;    j < length;  j++ )
            {
                    i = ( (unsigned int) ( *value >> 24) ^ tx_message[j] ) & 0xff;
                    *value = ( *value << 8 ) ^ crc_table[i];
            }
    
            return *value;
    
    }    //end checksum
    
    unsigned long int  MyCRC::CrcCheckSum(char *tx_message,unsigned long int length)
    {
            unsigned long int value;
            InitCrcCheckSum(&value);
            return CrcCheckSumC(tx_message,length,&value);
    }    // end checksum
    
    int MyCRC::FileCheckSum(char *file,unsigned long int *result)
    {
            unsigned long int i;
            char Buffer[BUFFERLEN+1];
            unsigned long int numread;
            FILE *fp;
            GenCrcTable(0);
            InitCrcCheckSum(result);
            if ((fp = fopen(file, "rb")) == NULL)
                    return FAIL;
            while (!feof(fp))
            {
                    numread = fread( Buffer, sizeof( char ), BUFFERLEN, fp);
                    if (0 != (numread % 4))
                    {
                            for (i=numread;i<BUFFERLEN;i++)
                                    Buffer[i]=0x00;
                                    numread=((numread % 4)+1)*4;
                    }
                    *result=CrcCheckSumC(Buffer,numread,result);
                    if (feof(fp))
                            break;
            }
    
            return PASS;
    }
    

    und noch die crc.h

    class MyCRC{
    public:
            MyCRC();
            int FileCheckSum(char *file,unsigned long int *result);
    private:
    
            unsigned long crc_table[256];
    
            unsigned long int value;
            void  InitCrcCheckSum(unsigned long int *value);
            void GenCrcTable(unsigned long int value);
            unsigned long int   CrcCheckSumC(char *tx_message,unsigned long int length, unsigned long int *value);
            unsigned long int  CrcCheckSum(char *tx_message,unsigned long int length);
    
    };
    

    ich hoffe du kannst mir jetzt weiterhelfen.

    mfg
    wdsl


Anmelden zum Antworten