Patrick Canterino: Crypt vs. MD5

Beitrag lesen

Hallo Dennis,

Ja, wenn ich das richtig gesehen habe, dann gibt es da eben auch zwei Funktionen:

  • apache_md5_crypt()
  • unix_md5_crypt()

Und die in PHP ist eben von UNIX - da gibts wohl nix für den Apachen :-(

Nein, unix_md5_crypt() erzeugt etwas ganz anderes als das normale MD5. Es ist eine neue Version des alten crypt(), die auf MD5 basiert und ebenfalls ein Salt und zusätzlich noch einen "Magic String" verwendet.
Wie sie genau funktioniert, ist mir ehrlich gesagt ein wenig zu hoch.

Habe mir jetzt gerade obige Funktion mal angeschaut - besteht eigentlich nur aus diesem Code:

sub apache_md5_crypt {

change the Magic string to match the one used by Apache

local $Magic = q/$apr1$/;

unix_md5_crypt(@_);
}


>   
> Es scheint grade in der dritten Zeile zu liegen - doch genau die verstehe ich nicht. Da scheint ein bestimmter Wert gesetzt zu werden, doch welcher Wert? und auf was?  
  
Da wird ganz einfach der Magic String für unix\_md5\_crypt() auf das vom Apache verwendete $apr1$ gesetzt.  
  
Ich habe allerdings gerade etwas in der [Beschreibung zu crypt() im PHP-Handbuch](http://www.php.net/crypt) entdeckt: Wenn man ein Salt angibt, das mit "$1$" beginnt und anschließend irgendetwas dran hängt, scheint die MD5-Version von crypt() verwendet zu werden. Und das Ergebnis stimmt mit dem von unix\_md5\_crypt() aus Crypt::PasswdMD5 überein! Allerdings habe ich es noch nicht geschafft, in den dazu zu bringen, den Magic String vom Apache zu verwenden.  
  
Viele Grüße  
  Patrick Canterino

-- 
"In Deutschland löst man ein Problem dadurch, indem man solange darüber diskutiert, bis keiner mehr weiß, worum es eigentlich ging." (Ich selbst)