C++ MD5 File-checksum mit crypto++

badday

Commander
Registriert
Sep. 2007
Beiträge
3.023
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
 
Zuletzt bearbeitet:
Soweit ich das sehe fehlt da erstmal ein bool-Argument:
Code:
crypto/files.h|60|Anmerkung: Kandidaten sind: 
CryptoPP::FileSource::FileSource(const char*, 
bool, 
CryptoPP::BufferedTransformation*, 
[B]bool[/B])
Der letzte bool fehlt in Deinem Aufruf.

Ausserdem magst Du vielleicht das CryptoPP::FileSource Objekt einer
Objektvariablen zuweisen, z.B. damit man es später "deleten" kann.
 
Zuletzt bearbeitet:
Moin,

daran liegt es nicht, für die letzten beiden gibt es Standardargumente. Allerdings weiß ich nicht, was sich hinter BufferedTransformation verbirgt, was wohl das Problem ist.

Gruß,

badday

EDIT:
Das ganze hat sich geklärt, hier die Lösung:
Code:
string md5_string;
CryptoPP::Weak1::MD5 hash;        
CryptoPP::FileSource( itr->path().string().c_str(), true, new CryptoPP::HashFilter(hash, new CryptoPP::HexEncoder(new CryptoPP::StringSink(md5_string))));

Gruß,

badday
 
Zuletzt bearbeitet:
Ja. Über den "Weak1" Namespace vor dem HashFilter hatte ich mich auch schon gewundert.
Hatte allerdings gestern vorübergehend meinen Accout hier lahmgelegt...
Schön, dass es jetzt klappt.
 
Zurück
Oben