Anzeige:
Ergebnis 1 bis 3 von 3

Thema: [C++] Md5sum Code Problem

  1. #1
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549

    [C++] Md5sum Code Problem

    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:

    Code:
    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
    Code:
    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:
    Code:
    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:
    Code:
      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
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  2. #2
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    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/

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    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

    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.

    [Edit]
    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. [/Edit]

    MfG Peschmä
    Geändert von peschmae (15-11-2005 um 20:06 Uhr)
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •