Willkommen in der Webstatt Zum Webstatt Blog und Stories
BNightSpeeder am 18.09.06 17:45

Hallo,

ich habe nen script gepastelt das einen Text durch ein Passwort codiert, aber leider nicht wieder de! Da kommt nähmlich immer nen Fehler, look:

Quote
"Hallo" wird zu "8G5;)" und das wird zurück gecodet zu "Y@552"

Ich weiß nicht wo mein Fehler ist:

Codier funktion:

function mdm1($pass,$text) {

// Umwandlungskette
$zeichen="!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ";
$zeichenlaenge = strlen($zeichen);


//Passwort als Stelle ausgeben
$passlaenge = strlen($pass);

for ($i=0;$i<=$passlaenge-1;$i++) {
$passzeichen[$i] = strcspn($zeichen,$pass[$i]);
}

//Quersumme des Passwortes
$passzeichen_implode = implode("",$passzeichen);

settype($passzeichen_implode, "STRING");
$null = 0;
for($i=0; $i<strlen($passzeichen_implode); $i++)
{
$null = $null + $passzeichen_implode[$i];
}

//Text um Stellen verschieben.

$textlaenge = strlen($text);

for ($i=0;$i<=$textlaenge;$i++) {
$textzeichen[$i] = strcspn($zeichen,$text[$i]);
//

$zeichen_ersetzungs_stelle = $textzeichen[$i]+$passzeichen[$i]+$null;
//

if ($zeichen_ersetzungs_stelle>=$zeichenlaenge) {
$zeichen_neu_stelle[$i] = $zeichen_ersetzungs_stelle-$zeichenlaenge;
}
else {
$zeichen_neu_stelle[$i] = $zeichen_ersetzungs_stelle;
}
//

}


//////

$zeichen_neu_stelle_laenge = strlen($zeichen_neu_stelle);

for($i=0;$i<=$zeichen_neu_stelle_laenge-1;$i++) {
echo substr($zeichen,$zeichen_neu_stelle[$i]-1,1);
}


}


Und hier die Decodier funktion, mit der es Probleme gibt, ich finde den fehler aber nicht, er muss aber irgendwo zwischen zeile 29 und 49 liegen, jedenfalls vermute ich es!

function mdm1_de($pass,$text) {

// Umwandlungskette
$zeichen_dr=" ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#\"!";
$zeichen="!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ";
$zeichenlaenge = strlen($zeichen);

//Passwort als Stelle ausgeben
$passlaenge = strlen($pass);

for ($i=0;$i<=$passlaenge-1;$i++) {
$passzeichen[$i] = strcspn($zeichen,$pass[$i]);
}

//Quersumme des Passwortes
$passzeichen_implode = implode("",$passzeichen);

settype($passzeichen_implode, "STRING");
$null = 0;
for($i=0; $i<strlen($passzeichen_implode); $i++)
{
$null = $null + $passzeichen_implode[$i];
}

//Text um Stellen zurück verschieben.

$textlaenge = strlen($text);

for ($i=0;$i<=$textlaenge-1;$i++) {
$A = strcspn($zeichen,$text[$i]);
$B = $A-$passzeichen[$i];
$C[$i] = $B-$null;

//Überprüfen ob es einen Minus gibt.
$D = substr_count($C[$i],"-"); //Ergebniss = $D

if ($D=="1") {
$E = substr($C[$i],1); //Minus entfernen falls da!
echo substr($zeichen_dr,$C[$i],1); // Zeichenkette "-" benutzen und ausgeben.
}
else {
substr($zeichen,$C[$i],1);// Zeichenkette "normale" benutzen und ausgeben.
}
}

}




Mfg. BNS

netcup.de Warum gibt es hier Werbung?
milahu milahu am 18.09.06 18:13

Hrrm.. Algo im Eigenbau? Den zu debuggen wird lustig! ;)

Vor allem, wenn du ihn so schlampig dokumentierst.. :S

Ich hab's mal gekürzt, aber durchsteigen tu ich noch nicht. BTW, was ist so toll an strcspn? strpos is doch viel schöner ;)

function mdm1_de($pass,$text) {
// Umwandlungskette
$zeichen_dr=" ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#\"!";
$zeichen="!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ";
for ($i=0;$i<strlen($pass);$i++)
$passzeichen[$i] = strpos($zeichen,$pass[$i]);
//Quersumme des Passwortes
foreach ($passzeichen as $c)
$qs += $c;
//Text um Stellen zurück verschieben.
for ($i=0;$i<strlen($text);$i++) {
$A = strpos($zeichen,$text[$i]);
$B = $A-$passzeichen[$i];
$C[$i] = $B-$qs;
if ($D < 0) { // negativer index -- bööse!
$E = substr($C[$i],1); // whatever...
echo substr($zeichen_dr,$C[$i],1);
}
else {
substr($zeichen,$C[$i],1);
}
}
}

Variabelnaben solltest dir übrigens auch besser überlegen :S

BNightSpeeder am 19.09.06 13:47

Gut also nachdem ich jetzt langsam durchsteige ;) und es kapiere hab ich noch ne Frage,
wieso kommt immer "!!!!!" anstatt "Hallo" raus?

milahu milahu am 19.09.06 15:03

Liegt vll daran, dass $D $C[$i] sein sollte :\

"Index out of bound" Fehler solltest übrigens besser verhindern -- Stichwort "modulo".
Jetzt prüfst du ja nur, ob der Index negativ ist.

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt