tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von deepthroat
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
569
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    philippo philippo ist offline Mitglied Bronze
    Registriert seit
    May 2005
    Beiträge
    47
    Hallo,

    ich habe die sha1.c von http://www.packetizer.com/security/sha1/ in mein Projekt eingebunden und eine Function erstellt, die mir aus einer Datei, eine Checksumme erstellen soll. Das klappt auch super, nur will ich die Checksumme gleich prüfen und hier stosse ich auf ein Datentyp-Problem - und an die Grenzen meines C++ Wissens.

    Hier mal die Function:
    Code :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    
    bool checkEAChecksum() {
        SHA1        sha;                        // SHA-1 class
        FILE        *fp;                        // File pointer for reading files
        char        c;                          // Character read from file
        unsigned    message_digest[5];          // Message digest from "sha"
     
        if (!(fp = fopen("X:\\DateiDieGeprueftWerdenSoll.txt","rb")))
            {
                AfxMessageBox(_T("Fehler! DateiDieGeprueftWerdenSoll.txt wurde nicht gefunden!"), MB_OK | MB_ICONERROR );
                return (false);
            }
     
        /*
            *  Reset the SHA1 object and process input
            */
        sha.Reset();
     
        c = fgetc(fp);
        while(!feof(fp))
        {
            sha.Input(c);
            c = fgetc(fp);
        }
     
        
        if (!sha.Result(message_digest))
        {
            AfxMessageBox(_T("sha: could not compute sha1 checksum"), MB_OK | MB_ICONERROR );
        }
        else
        {
            FILE *stream ;
            if((stream = freopen("d:\\file.txt", "w", stdout)) == NULL) exit(-1);
     
            printf( "%08x%08x%08x%08x%08x",
                    message_digest[0],
                    message_digest[1],
                    message_digest[2],
                    message_digest[3],
                    message_digest[4]);
            printf("\n");
     
        }
     
        return(false);
    }

    Ich würde jetzt gerne den Output, was ich mit printf erzeuge (mit der gleichen Formatierung!), in einen CString packen, damit ich ihn vergleichen kann. Wie kriege ich das hin?

    Ich wäre dankbar für jegliche Tips!
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Erstmal ist deine Schleife zum Einlesen "ungünstig", da sie endlos laufen wird wenn ein Fehler auftritt (ferror(fp) == true ist).
    Code cpp:
    1
    2
    3
    4
    5
    
    int c;
    while ((c = fgetc(fp)) != EOF) {
      sha.Input(c);
    }
    if (ferror(fp)) /* ERROR: Datei nicht vollständig gelesen */
    Allerdings ist es nicht gerade effizient Zeichen einzeln einzulesen, man liest normalerweise gleich einen ganzen Block in einen Puffer (mit fread).

    Einen CString kannst du ebenso formatieren wie mit printf auch. Btw, warum verwendest du denn freopen und nicht einfach fprintf(stdout, "..", ...)?
    Code cpp:
    1
    2
    3
    4
    5
    6
    
    CString str;
    str.Format("%08x%08x%08x%08x%08x", message_digest[0],
                    message_digest[1],
                    message_digest[2],
                    message_digest[3],
                    message_digest[4]);
    Gruß
    philippo bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    philippo philippo ist offline Mitglied Bronze
    Registriert seit
    May 2005
    Beiträge
    47
    DANKE!

    Zitat Zitat von deepthroat Beitrag anzeigen
    Btw, warum verwendest du denn freopen und nicht einfach fprintf(stdout, "..", ...)?
    Das war noch ein Relikt aus vorherigen Experimenten ohne Bedeutung...
    Geändert von philippo (06.10.10 um 15:22 Uhr)
     

Ähnliche Themen

  1. Problem mit Datentyp
    Von spirou25 im Forum ASP
    Antworten: 1
    Letzter Beitrag: 05.02.10, 12:01
  2. md5-Hash interpretations Problem?
    Von Giovanni im Forum PHP
    Antworten: 21
    Letzter Beitrag: 06.08.08, 10:21
  3. java MD5-Hash vs. mysql MD5-Hash
    Von xrax im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 2
    Letzter Beitrag: 01.07.08, 15:20
  4. Problem mit md5 Hash
    Von Berrry im Forum PHP
    Antworten: 4
    Letzter Beitrag: 22.02.08, 12:32
  5. Access Problem mit Datentyp
    Von SirNeo im Forum Office-Anwendungen
    Antworten: 5
    Letzter Beitrag: 15.02.02, 09:45