PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Md5sum Code Problem



peschmae
15-11-2005, 17:50
Ich versuche gerade die Md5sum Impelementierung von http://userpages.umbc.edu/~mabzug1/cs/md5/md5.html zu kompilieren (Datei kann man nicht dort runterladen, findent man aber per Google).

Dabei gibts (neben anderem was ich gefixt habe - vor allem Verwendung alter Header) folgenden Fehler:



md5.cc: In member function »void MD5::update(std::ifstream&)«:
md5.cc:164: Fehler: ungültige Umwandlung von »unsigned char*« in »char*«
md5.cc:164: Fehler: Argument 1 von »std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::read(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]« wird initialisiert
make: *** [md5.o] Fehler 1




void MD5::update(ifstream& stream){

unsigned char buffer[1024];
int len;

while (stream.good()){
stream.read(buffer, 1024); // <-- hier ist der Fehler!
len=stream.gcount();
update(buffer, len);
}

}


wenn ich nun annehme dass der dort ein nicht-unsigned char[] möchte gibts:


md5.cc: In member function »void MD5::update(std::ifstream&)«:
md5.cc:166: Fehler: ungültige Umwandlung von »char*« in »unsigned char*«
md5.cc:166: Fehler: Argument 1 von »void MD5::update(unsigned char*, unsigned int)« wird initialisiert
make: *** [md5.o] Fehler 1


das einzige was geht ist:


unsigned char buffer[1024];
...
stream.read((char*)buffer, 1024);


Kann mir das einer erklären?

Sollte jemand sonst eine Alternative haben an C++-Impelementiertem bzw. nutzbarem funktionierenden Checksummenalgorithmus ist das btw. auch willkommen.
Allerdings sollte das ganze möglichst klein sein, also nichts à a la libcrypto++ - das ist mir zu umfangreich.

MfG Peschmä

P.S. und ja ich weiss das Md5sum scheinbar nicht sicher ist, aber ich benötige das nicht für Kryptographie oder so

locus vivendi
15-11-2005, 19:14
Also, dass der Compiler ohne den expliziten Cast den Code nicht akzeptiert, ist schon mal korrekt so. Eine implizite Umwandlung gibt es da in der Tat nicht. Was noch dümmer ist, ist allerdings, dass auch das Ergebnis des expliziten Casts nicht spezifiziert ist. Jedenfalls soweit ich weiß. Wenn du ganz sicher gehen möchtest, solltest du die Daten konvertieren. Allerdings ist es wohl so das auf quasi allen Compilern in der Praxis der Cast "das Richtige" macht.

Bezüglich anderer Implementierungen:
Ich würde mir Botan auf jeden Fall mal anschauen.
http://botan.randombit.net/

peschmae
15-11-2005, 19:30
Achso, jetzt hab ichs gesehen. Wenn ich den Typ auf char* ändere meckert er erst zwei Zeilen weiter unten, nämlich dann wenn ich das auch benutze. Habe das dreimal angeguckt und immer die falsche Zeile gelesen :D

Wie würde ich "die Daten konvertieren"? (Ich will ja nix ändern. Memcpy? Oder (char*)((void*)buffer)? )

Danke für den Link, gucke ich mir gleich mal an.


Botan sieht sehr nett aus, aber auch hier:
Ich finds irgendwie irrsinnig n 24 kb Programm (ok, wird noch was grösser aber nicht extrem viel) gegen eine 1.7 MB Bibliothek zu linken weil die einen 10 kb grossen Algorithmus drin hat.

MfG Peschmä