MD5 -> Parameter...
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
apache
aufruf
bedingung
beitrag
fehler
fehlermeldung
funktion
komma
laptop
login
lukas
manual
neuauflage
normalerweise
parameter
pawort
sen
username
variable
window
-
Also ich hab da ein Script:
...blablabla... md5($passwort,$username); ...blablabla...
So, bie mir auf dem Laptop funzt das gibt gut und het keine Probleme, aber hier auf Lima gehts net, es kommt folgene fehlermeldung:
Warning: Wrong parameter count for md5() in /home/webpages/lima-city/klasset/html/mycms/admin/login.php on line 13
Warning: Cannot modify header information - headers already sent by (output started at /home/webpages/lima-city/klasset/html/mycms/admin/login.php:13) in /home/webpages/lima-city/klasset/html/mycms/admin/login.php on line 39
Jetzt ne frage, so viel ich weiss, darf man der Funktion nur 1 Parameter ?ber geben, aber warum werden dann in meinem Script 2 ?ber geben und auf meinem Laptop funktionierts und hier nicht...
Kann mich da jemand aufkl?ren???
mfg Lukas
PS: Ich will jetzt nicht h?ren, dass ich nicht die MD5 verschl?sslung nehmen soll, da sie zu unsicher ist, sondern ich will eine Antwort... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wechsel mal das Komma gegen einen Punkt aus. Vielleicht klappt es dann auch hier.
-
http://de.php.net/manual/de/function.md5.php
md5() erwartet exakt einen Parameter.
Der Aufruf in deinem Script ist also falsch. Er funktioniert somit wahrscheinlich auch nicht, allerdings kriegst du das auf deinem Laptop nur nicht mit, weil dort die Fehler nicht angezeigt werden. Das k?nnte an einer unterschiedlichen Einstellung in der PHP.ini liegen. -
string md5 ( string str )
Hat nur einen Parameter, du kannst das ganze allerdings einzeln machen.
aber warum werden dann in meinem Script 2 ?ber geben
Hast du das selbst geschrieben oder wieso r?tselst du das du zwei ?bergibst?
auf meinem Laptop funktionierts und hier nicht...
Was f?r ne php Version setzt du auf deinem Lappi ein?
ich w?rde das ganze einfach so machen:
passwortver = md5($passwort); usernamever = md5($username);
Allerdings ist es auch fraglich ob du wirklich den usernamen verschl?sseln willst da dies eher selten gebraucht wird....
Ich hoffe ich konnte dir helfen, falls nicht dann schildere bitte ausf?hrlicher f?r was du das brauchst und h?ng das ganze Script an. -
alopex hat recht... das liegt an der Fehlerausgabe.
Evtl. l?sst du die sogar mit einem Script "verschwinden" ;o) -
Danke f?r eure Antworten, aber es hilft mir gleich nicht so weit, ausser, dass ich immer mehr zur erkenntnis komme, dass ich das ?ndern muss.
Das script ist aus einem buch und zwar von diesem: http://www.amazon.de/exec/obidos/ASIN/3898423131/302-4324703-3756854
Da das Buch recht Professionell ist, nehme ich an, dass es nicht am script liegt.
Keine Fehler anzeigen... Nein, denn er zeigt eigentlich die fehler immer an...
Was noch interesssant ist, der md5 schl?ssel ist unter schiedlich, also md5($passwort,$username)!=md5($passwort)!=md5($username)
...
Wenn jemand ne l?sung hat, ausser, dass man der funktion md5 nur ein parameter ?bergeben darf, dann POSTEN!
mfg Lukas
PS: Ein bisschen mehr Code...
... if($username && $password) { /* verschl?sseltes Passwort erzeugen */ $encrypted = md5($username,$password); ...
-
M?glicherweise hat mlrecords recht, und du solltest das Komma gegen den Verkettungsoperator austauschen:
$encrypted = md5($username.$password);
In dem Fall benutzt der Script-Erfinder den Benutzernamen als "Salt" um W?rterbuchattacken auf die Passwortliste zu erschweren. Ob das allerdings sinnvoll ist, wage ich zu bezweifeln.
Und zur Professionalit?t des Buches:
Das Buch ist von 2003. Inzwischen hat sich in der PHP-Welt eine Menge getan. Leider ist das Buch bei Amazon schon nicht mehr erh?ltlich. Anscheinend gibt es also keine Neuauflagen. Daher halte ich es nicht f?r sehr geeignet. Auch die Kundenrezensionen zeigen, dass es nicht ganz der Hit war. -
?hh?
Was ist das f?r eine if Bedingung? Da steht
Username und Passwort
da wird quasi mal nix ?berpr?ft... als Kommentar steht das, dass verschl?sselte Passwort erzeugt wird.
Das w?re
$encrypted = md5($password);
Einzige M?glichkeit ist das wie es mlrecords gesagt hat, durch einen Punkt, damit werden die Strings miteinander verbunden und daraus die md5 Summe gebildet.
Wenn zwei Parameter der md5 Funktion ?bergeben werden kommt es zu einer Fehlermeldung, auf dem Lappi wirst du das auch sehen wenn du ganz oben vom Script
error_reporting(E_ALL);
eintr?gst. -
@tuvok
Die IF-Bedingung hat schon ihren Sinn (wenn man das error_reporting() ausstellt.^^). Damit wird gepr?ft, ob $passwort und $username ?berhaupt einen Wert haben. -
Macht man denn sowas nicht normalerweise mit isset? *verwirrt* Aber wird schon so stimmen wenn du es sagst ^^ habs nur selber noch nie so gemacht.
-
Macht man denn sowas nicht normalerweise mit isset?
Ja, ich w?rde das so machen, du auch ... aber professionelle Buch-Autoren?
Normalerweise macht man das so:
if(
isset($variable) &&
$variable != ''
) {
tue_irgendwas();
}
Hat man error_reporting() auf einen niedrigeren Level geschaltet, kann man das abk?rzen:
if( $variable ) {
tue_irgendwas();
}
Nicht sch?n, aber funktioniert. Letztendlich wandelt PHP den Typ der Variablen in einen Booleschen Wert um. Ist die Variable definiert und ungleich Null oder einem Leerstring, kommt TRUE zur?ck und damit ist die IF-Bedinung erf?llt.
Beitrag ge?ndert am 29.12.2005 00:06 von alopex -
Also, das mit dem Punkt geht nicht, dann stimmen die Schl?ssel nicht mehr ?berein...
Und wenn ich auf dem Lappi error_reporting(E_ALL); setzte, dann kommt auch keine fehlermeldung...
Ich besitzte PHP Version 5.0.3.
Damit das ganze nun ein wenig verauschauchlicht wird, generiere ich mal ein paar MD5 schl?ssel (auf dem Laptop):
$username="Lukas"; $passwort="kmatw"; #Dies ist nat?rlich nicht mein Passwort ^^ $pw1=md5($passwort,$username); $pw2=md5($passwort); $pw3=md5($username); $pw4=md5($passwort.$username); $pw5=md5($username.$passwort); echo $pw1."<br>".$pw2."<br>".$pw3."<br>".$pw3."<br>".$pw4;
Ausgabe:
<?!??o??ke???
3cc521b9d56ff315c76b65e91aa5f917
77aeaf26b4e718fdd956fdbfc0c178f6
77aeaf26b4e718fdd956fdbfc0c178f6
a533942d8123633bc28e21b9641f2805
Wie man nun sieht ist der erste Schl?ssel ganz anderst, das heisst es sieht so aus, als ob bei der ersten, wie Alopex schon gesagt hat, der username als "salt" verwendet wird.
Warum findet man nirgends etwas ?ber das, aber bei mir funktioniert es gleich?
mfg Lukas
-
Lass mich raten?
Apachefriends XAMMP f?r Windows? Apache W32 nehme ich an.
Naja, alles was auf Windows-Servern funktioniert, muss nicht gleich ordentlich unter einem Linuxserver laufen.
klasset schrieb:
Warning: Cannot modify header information - headers already sent by (output started at /home/webpages/lima-city/klasset/html/mycms/admin/login.php:13) in /home/webpages/lima-city/klasset/html/mycms/admin/login.php on line 39
Die Fehlermeldung ensteht dadurch, dass vor dem Aufruf von header() schon etwas
zum Client gesendet wurde. Es ist darauf zu achten, dass weder HTML- noch
PHP-Fragmente zum Browser gesendet werden.
Es reicht schon aus, wenn nur ein falsches Leerzeichen an den Clienten gesendet werden, um diese Fehlermeldung auszul?sen.
Du kannst diese Fehlermeldung unterdr?cken (beheben w?re nat?rlich besser :D), indem du ein @ vor die Funktion header setzt!
-
Seit PHP 5.0.0 hat die Funktion einen zweiten optionalen Parameter.
http://www.zend.com/manual/function.md5.php
Allerdings ist dieser Parameter kein String sondern ein Boolean und bewirkt die R?ckgabe in einer anderen Form (es werden dann alle Zeichen benutzt und nicht nur 0-9 und a-f).
Allerdings hat man diesen Parameter zur Zeit in der das Buch geschrieben wurde nicht gekannt.
Und das der String in true umgewanndelt wird ist auch sehr ungew?hnlich, denn es ist egal was f?r ein String genommen wird. Es kommt dann immer das gleiche raus. Somit h?tte man nat?rlich gleich true hingeschrieben. ;)
P.S. es kommt bei dir kein Fehler, da der String in eine boolean umgewandelt wird.
Das heisst aber nicht, dass das Skript richtig ist.
Jens -
hirbod schrieb:
Lass mich raten?
Apachefriends XAMMP f?r Windows? Apache W32 nehme ich an.
Richtig, aber trotzdem ist es doch komisch, dass man nirgens im Internet etwas findet, was erlaubt, dass man der FUnktion MD5 zwei Parameter ?bergeben darf. Das komische am ganze ist ja schlusendlich noch, dass ein ganz anderer Hash zur?ck kommt, als wenn man es anders versucht...
Ich glaube kaum, dass es am XAMMP oder an Windows, liegt.
Ich tippe eher auf die PHP Version...
Das mit dem Header ist mir klar, denn als ein fehler in Line 13 passierte, schickte er ja schon die fehlermeldung und dadurch sind dan wieder daten gesendet...
Gibt es denn keine Erkl?rung f?r mein Problem?
mfg Lukas
?dit: zu langsam
Beitrag ge?ndert am 29.12.2005 11:59 von klasset -
Ah endlich mal eine L?sung...
Das mit dem String zu Boolean ist mir klar, denn es wird auch immer wieder ?berpr?ft: if($var) das heisst enth?lt die Variable etwas so wird TRUE zur?ckgegeben ansonsten FALSE.
Was in meinem Script eigentlich sehr ungeschickt ist, denn es wird vorher ?berpr?ft, ob die beiden Variabeln nicht leer sind: if($passwort && $username)
was ja uch wieder ein paar user nicht also gut empfinden...
Warum hat Lima eigentlich immer noch PHP 4 ?
Wann wird das mal geupdatet?
Auf jedenfall Danke an alle, die mir geholfen haben, mein Problem zu l?sen, auch wenn sie nicht immer mit meiner Meinung ?bereinstimmten...
mfg Lukas
PS: Kann geschlossen werden... -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage