Announcement

Collapse
No announcement yet.

Cram-MD5

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Cram-MD5

    Guten Morgen miteinander

    Ich programmiere im Moment ein Mail-Programm, das funktioniert eigentlich alles gut, ich kann auch schon Mails senden, ...

    Nun möchte ich den Benutzern noch ermöglichen, sich mit Cram-MD5 anzumelden. Leider verstehe ich jedoch nicht, wie das Passwort und der Zeitstempel verschlüsselt wird.
    Diese drei Seiten habe ich gefunden:
    wikipedia
    vb@archiv
    RFC 2195

    Hoffentlich könnt ihr mir weiterhelfen.
    Vielen Dank
    Lukas

  • #2
    Sei gegrüsst

    Wie meinst du verschüsselt, ein Hash ist eine Art fast kollisionsfreie Quersumme, d.h. keine Verschlüsselung sondern eine Einwegfunktion.

    Die 128 Bit langen MD5-Hashes (englisch auch „message-digests“) werden normalerweise als 32-stellige Hexadezimalzahl notiert.
    Nachdem der Benutzer (Client) sein Passwort eingegeben hat, wird der Hash jeweils im Client berechnet und mit dem gespeicherten Server Hash verglichen; wenn identisch dann authentifiziert.

    Comment


    • #3
      Hallo Max
      Tut mir leid, dass ich mich nie gemeldet habe, das Mail-Programm läuft. (mit Cram-MD5). Jedoch kann ich immer noch nicht verstehen, wie der MD5-Algorithmus errechnet wird. Hat jemand Zeit mir das zu erklären. Ich kann leider mit den vielen Beispielen im Internet nichts anfangen Wenn das jedoch niemand weiss, dann ist es natürlich auch egal, habe es jetzt mit der Kryptoapi gelöst.
      Freundliche Grüsse
      Lukas

      Comment


      • #4
        Tja es ist "sicherlich" kompliziert aber es funktioniert

        Der MD5-Algorithmus (Message Digest 5) liefert einen Hashwert der Länge 128 Bits (= 16 Bytes).
        Der Algorithmus ist im RFC 1321 (Request for Comment, http://www.faqs.org/rfcs/rfc1321.html) beschrieben

        Ein Hashwert eines Dokuments ist eine Zahl, die die Hashfunktion aus der Information des Dokuments berechnet. Dabei sollten Hashwerte unterschiedlicher Dokumente möglichst verschieden sein.

        Also die Grundidee ist aus einem Namen einen Wert zu generieren, meistens mit einer mod-Funktion, hab mal was aus einer Password-Prüfung im Anhang, um dir ein besseres Gefühl zu geben:

        procedure TRijndaelCipher.KeyByPassword(const thePassword: string);
        var sha1: TSHA1Digest;
        pSha1: ^TSHA1Digest;
        cntr: integer;
        begin
        if Length(thePassword) > 0 then begin
        HashSHA1(sha1,thePassword[1],Length(thePassword));
        pSha1:= @fKey[0];
        for cntr:= 1 to Length(fKey) div sizeof(TSHA1Digest) do begin
        pSha1^:= sha1;
        Inc(pSha1);
        end;
        Move(sha1, pSha1^,Length(fKey) mod sizeof(TSHA1Digest));
        end
        else
        raise TRijndaelCipherException.CreateWithErrorCode('No valid
        password.',cRCECInvalidPassword);
        end;


        und der Aufruf ist dann einfach
        HashSHA1(sha1,thePassword[1],Length(thePassword));

        mit bestem Gruss, Max

        Comment


        • #5
          Hallo Max
          Soweit bin ich schon gekommen. Da ich jedoch den Code in verschiedenen Programmiersprachen gebrauche, hilft mir das leider nicht viel, da es in vb/vba/... diese Funktion nicht gibt
          Ich habe auch einmal ein Code gefunden, der problemlos funkitoniert, aber dennoch würde mich interessieren, wie die einzelnen Schritte beim Bilden des MD5-Hash funktionieren!
          Das RFC 1321 konnte mir genau so wenig weiterhelfen wie wikipedia. Im RFC 1321 habe ich Step 1 verstanden. Den zweiten Schritt konnte ich jedoch schon nicht mehr nachvollziehen.
          Ich wäre sehr froh, wenn mir nochmals jemand helfen könnte
          Vielen Dank für eure Hilfe
          Lukas

          Comment


          • #6
            Die zentrale Routine des MD5 nutzt einen Inputbuffer mit 128 Bit Breite, der in vier Segmente zerlegt ist (je nach Prozessor und Speicherlayout).
            Der Inputbuffer ist dann mit bestimmten Werten initialisierbar (MD5.reset)
            Von den Daten nimmt die Routine dann nacheinander 512-Bit Bloecke, die sich nun kodieren (komprimmieren) lassen.
            Insgesamt vier solcher nichtlinearer Funktionen und eine Schiebeoperation kommen zum Tragen.
            Das Resultat ist dann ein 128-Bit Wert, der fuer den naechsten 512-Bit Block zum berechnen kommt. Sind alle Bloecke durch, ist das Resultat wiederum 128-Bit als Endergebnis.
            Vor der Berechnung des Hash reduziert der Algorithmus die Daten auf eine praktikable Groesse in Byte, die durch 64 teilbar ist (entspricht 512 Bit).
            Zuletzt editiert von max kleiner; 30.08.2007, 16:26.

            Comment

            Working...
            X