MD5 File-checksum mit crypto++

badday

Erfahrenes Mitglied
Moin zusammen,

ich versuche seit einiger Zeit, mithilfe von crypto++ Checksummen von Dateien zu erstellen. Hierzu mein Code:
Code:
string md5_string;
CryptoPP::Weak1::MD5 hash;
CryptoPP::FileSource( itr->path().string().c_str(), //boost_filesystem. sind die Dateinamen als C-String
            true,
            new CryptoPP::Weak1::HashFilter(hash, 
            new CryptoPP::HexEncoder(
            new StringSink(md5_string))));
Der Compiler sagt:
main.cpp|40|Fehler: expected type-specifier|
main.cpp|40|Fehler: expected »)«|
main.cpp|41|Fehler: keine passende Funktion für Aufruf von »CryptoPP::FileSource::FileSource(const char*, bool, int*)«|
crypto/files.h|60|Anmerkung: Kandidaten sind: CryptoPP::FileSource::FileSource(const char*, bool, CryptoPP::BufferedTransformation*, bool)|
crypto/files.h|58|Anmerkung: CryptoPP::FileSource::FileSource(std::istream&, bool, CryptoPP::BufferedTransformation*)|
crypto/files.h|56|Anmerkung: CryptoPP::FileSource::FileSource(CryptoPP::BufferedTransformation*)|
crypto/files.h|50|Anmerkung: CryptoPP::FileSource::FileSource(const CryptoPP::FileSource&)|



Ich habe im Internet schon gesucht, aber finde keinen Unterschied zwischen den dort vorgeschlagenen Lösungen und meinem Ansatz. Weiß jemand, wo der Fehler ist? Ich will die MD5-checksumme einer Datei in einem string speichern.

Vielen Dank.


Gruß,

badday
 
Hi.

Ich würde ja mal CryptoPP::StringSink probieren. Ansonsten zeig den vollständigen Code und die vollständigen Fehlermeldungen so dass man sehen kann auf welche Zeile sich Meldungen beziehen.

Gruß
 
Moin,

also der Code sieht so aus:
Code:
        string md5_string;
        CryptoPP::Weak1::MD5 hash;
        CryptoPP::StringSink sink(md5_string);
        CryptoPP::HexEncoder hexEncoder(&sink);
        CryptoPP::HashFilter hashFilter(hash, &hexEncoder);
        CryptoPP::FileSource( itr->path().string().c_str(), true, hashFilter); //hier liegt das Problem, "Z.  48"
main.cpp||In function »void print_files(std::string)«:|
main.cpp|48|Fehler: keine passende Funktion für Aufruf von »CryptoPP::FileSource::FileSource(const char*, bool, CryptoPP::HashFilter&)«|
crypto/files.h|60|Anmerkung: Kandidaten sind: CryptoPP::FileSource::FileSource(const char*, bool, CryptoPP::BufferedTransformation*, bool)|
crypto/files.h|58|Anmerkung: CryptoPP::FileSource::FileSource(std::istream&, bool, CryptoPP::BufferedTransformation*)|
crypto/files.h|56|Anmerkung: CryptoPP::FileSource::FileSource(CryptoPP::BufferedTransformation*)|
crypto/files.h|50|Anmerkung: CryptoPP::FileSource::FileSource(const CryptoPP::FileSource&)|

Falls weitere Infos benötigt werden --> bitte melden.


Gruß,

badday
 
Wieso verwendest du nicht einfach md5-DLL?:confused:
ich habe hier ne DLL (im Anhang).
Der entsprechende Header ist hier:
Code:
#ifndef md5lib_h
#define md5lib_h
typedef void (*MD5) (char*,char*); // Erster Parameter das File, 2. die generierte Summe (call by reference-Wertübergabe)
#endif
Laden kannst du die DLL so: (Win32Api)
Code:
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
HINSTANCE md5lib;
MD5 hexMD5;
char checksum[32];
md5lib=LoadLibrary("md5lib.dll");
hexMD5=(MD5) GetProcAddress(md5dll, "hexMD5");
(*hexMD5) ("deinfile.txt",checksum);
printf("MD5-Summe: %s\n",checksum);
return 0;
}
Es kann sein, dass du unter Umständen noch libs einbinden musst :)
Unter Dev-C++ problemlos gelaufen. Falls du Probleme hast, poste sie hier!;)
Wenn dein Compiler es nicht akzeptiert wie oben:
Code:
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
extern "C" {
int main()
{
HINSTANCE md5lib;
MD5 hexMD5;
char checksum[32];
md5lib=LoadLibrary("md5lib.dll");
hexMD5=(MD5) GetProcAddress(md5dll, "hexMD5");
(*hexMD5) ("deinfile.txt",checksum);
printf("MD5-Summe: %s\n",checksum);
return 0;
}
}
PS: :google: bringt tatsächlich nichts!
lorenz
 

Anhänge

  • md5lib.zip
    56,6 KB · Aufrufe: 41
Moin,

ich hatte leider vergessen, dass ich plattformübergreifend programmiere. Daher geht das wohl leider nicht.

Trotzdem danke.

Gruß,

badday
 
So wie für mich die Fehlermeldung aussieht, gib es die Funktion FileSource in der Entsprechenden Klasse nicht.
Mehr kann ich da leider nicht sagen
lorenz
 
So wie für mich die Fehlermeldung aussieht, gib es die Funktion FileSource in der Entsprechenden Klasse nicht.
Mehr kann ich da leider nicht sagen
lorenz
Das verstehe ich nicht. Warum sollte es diese nicht geben? Es werden doch sogar Kandidaten mit anderen Parametern vorgeschlagen. Die Frage ist daher eher: Welche Parameter erwartet die Funktion und dabei: was ist CryptoPP::BufferedTransformation?

Gruß,

badday
 
Mir ist diese Datei bekannt. Ich frage nur, was CryptoPP::BufferedTransformation genau sein soll. Hat jemand zufällig ein Beispiel zur Hand, dass die MD5 Checksumme einer Datei in einem String speichert?

Gruß,

badday
 
Zurück