Frage

Ich arbeite mit Subversion auf Basis von Windows und möchte ein einfaches Dienstprogramm in .NET für die Arbeit mit der Apache-Passwortdatei schreiben.Ich verstehe, dass es eine Funktion namens MD5Crypt verwendet, aber ich kann anscheinend keine Beschreibung des Algorithmus finden, die darüber hinausgeht, dass er irgendwann MD5 verwendet, um einen Hash zu erstellen.

Kann jemand den MD5Crypt-Algorithmus und das Passwortzeilenformat beschreiben?

War es hilfreich?

Lösung

Eine genaue Textbeschreibung des crypt-Algorithmus, der für die Verwendung mit sha256 und sha512 aktualisiert wurde, finden Sie unter http://www.akkadia.org/drepper/SHA-crypt.txt

Es enthält Kontraste zum MD5-Algorithmus und sollte Ihnen daher das bieten, was Sie suchen.

Andere Tipps

Eine Implementierung von md5crypt finden Sie im tcllib-Paket. Der Download ist verfügbar unter Quellenschmiede.

Ein Beispiel für ein Apache-kompatibles md5crypt finden Sie auch im Quellcode für den CAS Generic Handler

MD5Crypt ist im Grunde ein Ersatz für die altmodische Unix-Verschlüsselungsfunktion.Es wurde in freebsd eingeführt und auch von anderen Gruppen übernommen.

Die Grundidee ist folgende:

  • Ein Hash ist eine gute Möglichkeit, ein Passwort zu speichern
    • Sie nehmen das vom Benutzer eingegebene Passwort und hashen es
    • Vergleichen Sie es mit dem gespeicherten Hash
    • Wenn der Hash gleich ist, stimmen die Passwörter überein

Aber es gibt ein Problem:

  • Angenommen, Sie wählen das Passwort „jeff“ und ich wähle auch das Passwort „jeff“.
  • Jetzt sind unsere beiden Passwort-Hashes gleich.
  • Wenn ich also die gespeicherten Hash-Codes sehe, weiß ich, dass Ihr Passwort mit meinem identisch ist, „jeff“.

Daher können wir dem Passwort eine „Salt“-Zeichenfolge hinzufügen.

  • Das kann alles Mögliche sein.
  • Angenommen, für Ihr Konto ist es „zuzu“ und für mein Konto ist es „rjrj“.
  • Jetzt hashen wir die Zeichenfolge „jeffzuzu“ für Ihr Passwort und „jeffrjrj“ für mein Passwort.
  • Jetzt haben wir unterschiedliche Hashwerte für unser Passwort.
  • Wir können den Salt-Wert sicher mit dem gehashten Passwort speichern, da selbst die Kenntnis des Salt-Werts nicht hilft, den Hash zu entschlüsseln.

Sie erwähnen .net, in einem anderen Forum gibt es einen Hinweis darauf:

System.Security.Cryptography.MD5CryptoServiceProvider md5 = new
System.Security.Cryptography.MD5CryptoServiceProvider();

string hash =BitConverter.ToString((md5.ComputeHash(
System.Text.ASCIIEncoding.Default.GetBytes(stringtohash) ) ));

HTH!

Der Prozess ist ziemlich kompliziert...Das Salt und das Passwort werden nicht nur einmal, sondern 1000 Mal zusammen gehasht.Außerdem verwendet die Base64-Codierung ein anderes Alphabet und die Auffüllung am Ende wurde entfernt.

Das Beste wäre wahrscheinlich, eine Bibliothek zu finden, die man verwenden kann, wie glibc unter Cygwin.

Da Sie ohnehin gegen Apache programmieren, werfen Sie einen Blick auf Apache-Implementierung von crypt-md5.

Der ursprüngliche Algorithmus (glaube ich) in C kann gefunden werden Hier.Sie unterscheidet sich von der obigen Implementierung nur durch die andere magische Zahl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top