Prüfsumme einer Datei / eines Strings erstellen



  • Wie lässt sich am einfachsten die MD5 / SHA-1 Prüfsumme einer Datei / eines Strings erzeugen?



  • am einfachsten ist es, wenn du ne vorhanden Bibliothek verwendest.





  • Ja bitte gebt mir mal nen Link zu ner geeigneten Bibliothek.





  • Musst nur nen bisschen runterscrollen im Wikiartikel:

    http://sourceforge.net/project/showfiles.php?group_id=42360

    mfg.



  • Hier ein Beispiel um den Hashwert einer Datei zu berechnen:

    #include "md5.h" // Nicht vergessen md5.c zum Projekt hinzuzufügen
    #include <iostream>
    #include <fstream>
    
    int main()
    {
        std::cout << "Dateiname: ";
        std::string filename;
        std::cin >> filename;
        std::ifstream file(filename.c_str(), std::ios::binary); // Datei im binären Modus öffnen
    
        if(!file)
        {
            std::cout << "Fehler beim öffnen der Datei!" << std::endl;
            return 1;
        }
    
        md5_state_t state; // Eine neue md5_state_t Variabel für diese Session erstellen
                           // Hinweis: Nicht einmal pro Programm, sondern für jeden Hashcheck eine neue.
        md5_init(&state);  // Variable initialisieren (Tja, das ist C)
    
        do
        {
            char buf[1024]; // Buffer fürs einlesen reservieren
            file.read(buf, sizeof(buf));
    
            md5_append(&state, reinterpret_cast<md5_byte_t*>(buf), file.gcount());
            // Aktuellen Buffer durchrechnen (Es ist nicht nötig die gesamte Datei zu nehmen)
            // Muss gecastet werden, da ifstream::read und md5_append mit char und unsigned char arbeiten
        } while(file); // So lange bis die Datei zuende ist
    
        md5_byte_t hash[16]; // Variable für den Hash erstellen (md5_byte_t entspricht unsigned char)
        md5_finish(&state, hash); // Hash dieser Session in die Variable schreiben
    
        std::cout << "MD5-Hashwert: " << std::hex; // Zur Ausgabe hex nehmen
        for(int i = 0; i < sizeof(hash); ++i) // Alle 16 Byte durchgehen
        {
            std::cout << ((hash[i] & 0x000000F0) >> 4) // Ersten 4 Bit
                      <<  (hash[i] & 0x0000000F);      // Zweiten 4 Bit des aktuellen Byte
        }
        std::cout << std::endl; // Das wars :D
    }
    

    Hier ein Test ob's auch klappt:

    jhasse@joomoo:~/Projekte/Muell/console1$ md5deep md5.c
    700bfc75a07a64acdd2e8faea284b777  /home/jhasse/Projekte/Muell/console1/md5.c
    jhasse@joomoo:~/Projekte/Muell/console1$ ./console1
    Dateiname: md5.c
    MD5-Hashwert: 700bfc75a07a64acdd2e8faea284b777
    jhasse@joomoo:~/Projekte/Muell/console1$
    

    mfg.



  • Omg, das sieht auf den ersten Blick zwar ziemlich kompliziert aus, aber vielen Dank joomoo!!


Anmelden zum Antworten