[PHP] MD5 passwords maken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pelleke
  • Registratie: Maart 2003
  • Laatst online: 08-11-2024

pelleke

Aut viam inveniam aut faciam

Topicstarter
Hallo!

Ik heb een POP3-server draaien, en ik wil via PHP virtual users kunnen aanmaken.
De virtual user passwords zijn MD5-encrypted, en ik weet hoe ze gemaakt worden, althans, ik kan het met jullie hulp misschien nabootsen in PHP-code.

In de auth-file staat de volgende hash:
code:
1
:$1$89469114$SYWr9Tn0MxV06qVayH0td.
Dat lijkt dus op MD5, en die string aan het begin (89469114) is de laatste 8 cijfers van de Unix Timestamp waarop ie is aangemaakt.

Het PERL-script die deze file aanmaakt doet dat als volgt:
code:
1
$enc_passwd = Crypt::PasswdMD5::unix_md5_crypt( $passwd, substr(time(), -8) );

(Het password is hier "password")
Nu wil ik dit in PHP namaken, maar de crypt() functie geeft een hele andere output. Wel MD5 (als ik geen extra opties opgeef) maar als ik de hash in de authfile vervang, dan kan ik niet meer aanmelden!

Ik kon op google ook niks vinden, weet iemand hoe ik zo'n soortgelijk script in PHP maak?

Acties:
  • 0 Henk 'm!

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 17-09 15:48
Als het een MD5Sum is in combinatie met een timestamp moet het niet al te moeilijk zijn.
Aan je regeltje PERL te zien wordt de tijd ook meege-MD5-ed. Je zou eens iets als dit kunnen proberen:
PHP:
1
2
$time = time();
$enc_passwd = md5( $passwd, substr($time, -8));

Dat zou je MD5ed password moeten zijn dan moet je daar nog even die laatste 8 cijfer van time() bij zetten:
PHP:
1
$timeding = substr($time, -8);

en dan het geheel bij elkaar planten:
PHP:
1
echo ':$1$'.$timeding.'$'.$enc_passwd.'.';

Dan zou je hetzelfde resultaat moeten hebben. Heb je wel gechecked of je eigen aangemaakte password regeltje exact hetzelfde was als wat er stond? Soms moet er ook een newline achter je regel en volgens mij moet die . er wel bij geprint. Ben je dat niet vergeten? Een md5sum maakt iig geen string met .-jes :P

[ Voor 13% gewijzigd door Mac_Cain13 op 10-07-2004 16:46 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Mac_Cain13 schreef op 10 juli 2004 @ 16:43:
Als het een MD5Sum is in combinatie met een timestamp moet het niet al te moeilijk zijn.
Aan je regeltje PERL te zien wordt de tijd ook meege-MD5-ed. Je zou eens iets als dit kunnen proberen:
PHP:
1
2
$time = time();
$enc_passwd = md5( $passwd, substr($time, -8));

Dat zou je MD5ed password moeten zijn dan moet je daar nog even die laatste 8 cijfer van time() bij zetten:
PHP:
1
$timeding = substr($time, -8);

en dan het geheel bij elkaar planten:
PHP:
1
echo ':$1$'.$timeding.'$'.$enc_passwd;

Dan zou je hetzelfde resultaat moeten hebben. Heb je wel gechecked of je eigen aangemaakte password regeltje exact hetzelfde was als wat er stond?
en als je dan ff de manual van php leest zie je dat dit helemaal niet kan.
in php is 2e argument namelijk niet iets als een key ofzo
If the optional raw_output is set to TRUE, then the md5 digest is instead returned in raw binary format with a length of 16.

Acties:
  • 0 Henk 'm!

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 17-09 15:48
Verwijderd schreef op 10 juli 2004 @ 16:45:
[...]


en als je dan ff de manual van php leest zie je dat dit helemaal niet kan.
in php is 2e argument namelijk niet iets als een key ofzo

[...]
Omfg ik loop idd ff te suffen 8)7

Het moet of
PHP:
1
2
$time = time();
$enc_passwd = md5( $passwd.substr($time, -8));

worden of is dat achter de komma een extra optie in perl? Dan word het idd moeilijker.

Ik liep idd ff niet helemaal op te letten.

[ Voor 26% gewijzigd door Mac_Cain13 op 10-07-2004 16:49 ]


Acties:
  • 0 Henk 'm!

  • pelleke
  • Registratie: Maart 2003
  • Laatst online: 08-11-2024

pelleke

Aut viam inveniam aut faciam

Topicstarter
Ik begrijp het niet, ik krijg de volgende error:
code:
1
Warning: Wrong parameter count for md5() in C:\Program Files\nusphere\phpED\Projects\noname1.php on line 7

MD5() opgezocht: hij mag maar 1 parameter hebben en dat is de string.

Je zou dus die time van tevoren in de string moeten verwerken, maar ik weet niet hoe dat in zijn werk gaat.

//EDIT
Er mag ook nog een boolean achter. :)

[ Voor 7% gewijzigd door pelleke op 10-07-2004 16:48 . Reden: foutje ]


Acties:
  • 0 Henk 'm!

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 17-09 15:48
Ik deed het zoals blaat_schaap op merkte dus niet goed. Je moet even kijken of dat achter die komma een extra optie is in perl en zo ja wat dat precies doet. Dan moet je dat zelf gaan nabootsen. Als perl die 2 dingen alleen achter elkaar plakt en dan MD5ed kun je mijn (aangepaste) code dus wel gebruiken.

Acties:
  • 0 Henk 'm!

  • pelleke
  • Registratie: Maart 2003
  • Laatst online: 08-11-2024

pelleke

Aut viam inveniam aut faciam

Topicstarter
foutje? Cryipt() ipv md5()

LEvert een compleet andere hash op. Opvallend:

De uiteindelijke MD5-string BEGINT ALTIJD met de eerste 2 cijfers van de timestamp. Lijkt me niet gezond...

code:
1
2
3
4
5
6
<?php
$str='password';
$timeding='89469114';
$var='$1$'.$timeding.'$'.crypt($str,$timeding);
echo $var;
?>

Levert als output:
code:
1
$1$89469114$89o6CGGAwXwj6
wat eigenlijk moet zijn:
code:
1
$1$89469114$SYWr9Tn0MxV06qVayH0td.


Vat 't echt niet meer... Kent iemand die perl-command?

Acties:
  • 0 Henk 'm!

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 17-09 15:48
Hmm, blijkbaar gebruikt Perl het crypt commando in MD5 variant. Op php.net vond ik daat een interessant stukje over: http://nl.php.net/manual/nl/function.crypt.php

Je zult de crypt functie dus moeten gebruiken in samenwerking met het MD5 algoritme. Met de crypt functie en de uitleg op php.net moet je wel wat kunnen lijkt me. Ik zat er idd naast met mijn post hierboven.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:14
Die unix_md5_crypt heeft vrij weinig met traditionele UNIX crypt te maken. Het is slechts een formule om een MD5 hash te genereren met een salt als een extra parameters. Om het coderen extra tijdrovend te maken worden er een aantal verschillende coderingen gecombineerd.

De implementatie staat trouwens gewoon online: PasswdMD5.pm.

Met een beetje kennis van Perl en PHP moet dit toch wel te porten zijn. Je hebt er in PHP uitsluitend de MD5 functie voor nodig (en dus niet de crypt functie), en natuurlijk een hoop standaardfuncties voor stringmanipulaties.

[ Voor 16% gewijzigd door Soultaker op 10-07-2004 17:08 ]


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

pelleke schreef op 10 juli 2004 @ 16:23:
Ik heb een POP3-server draaien, en ik wil via PHP virtual users kunnen aanmaken.
De virtual user passwords zijn MD5-encrypted, en ik weet hoe ze gemaakt worden, althans, ik kan het met jullie hulp misschien nabootsen in PHP-code.
Zie de fijne crypt functie, die ook md5 crypts kan genereren.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:14
De crypt-functie van PHP gebruiken zou mooi zijn, maar helaas is de werking daarvan dus afhankelijk van hoe PHP gecompileerd is (weer een grove fout in de portability van de standard library als je het mij vraagt). De TS heeft een PHP compilatie die geen MD5-crypt uitvoert: "Nu wil ik dit in PHP namaken, maar de crypt() functie geeft een hele andere output."

Behalve PHP op de goede manier hercompileren op een systeem dat MD5-crypt ondersteund, kun je 'm dus misschien beter zelf implementeren. Dan ben je niet meer afhankelijk van dit soort platformafhankelijke eigenschappen.

Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

Soultaker schreef op 11 juli 2004 @ 16:24:
De crypt-functie van PHP gebruiken zou mooi zijn, maar helaas is de werking daarvan dus afhankelijk van hoe PHP gecompileerd is (weer een grove fout in de portability van de standard library als je het mij vraagt). De TS heeft een PHP compilatie die geen MD5-crypt uitvoert: "Nu wil ik dit in PHP namaken, maar de crypt() functie geeft een hele andere output."
Ik ken weinig versies van PHP die niet in staat zijn om een md5 crypt te maken. Het default zal misschien verschillen, maar je kan controleren of PHP de md5 crypts kan maken, en indien dat het geval is is het een kwestie van een juiste salt.
Behalve PHP op de goede manier hercompileren op een systeem dat MD5-crypt ondersteund, kun je 'm dus misschien beter zelf implementeren. Dan ben je niet meer afhankelijk van dit soort platformafhankelijke eigenschappen.
Aangezien z'n systeem ook al md5 crypts gebruikt lijkt mij een simpele hercompile het simpelste.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:14
igmar schreef op 12 juli 2004 @ 08:51:
Ik ken weinig versies van PHP die niet in staat zijn om een md5 crypt te maken. Het default zal misschien verschillen, maar je kan controleren of PHP de md5 crypts kan maken, en indien dat het geval is is het een kwestie van een juiste salt.
Zoals ik het lees kun je helemaal niet run-time kiezen wat het algoritme is. Nu zal het best zijn dat jij 'weinig versies van PHP kent' die andere algoritmes dan MD5-crypt gebruiken, maar volgens de topic starter heeft hij toch echt zo'n systeem te pakken.
Aangezien z'n systeem ook al md5 crypts gebruikt lijkt mij een simpele hercompile het simpelste.
Waar lees jij dat zijn syseem MD5 crypts gebruikt? Dat lijkt me nu juist niet het geval. De TS heeft wel een Perl module voor MD5-crypt en een POP3 server die die MD5-crypt gebruikt, maar dat zegt niet dat de systeem crypt zo werkt.

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
cram-md5 en digest-md5 zonder de crypt extensie zijn prima in php te genereren met de code zoals vermeld staat in: (zie mijn reacties)

[rml][ php] MD5 functies[/rml]
Pagina: 1