Webstatt.org - Community seit 2006 - 2012 (2024?)

Codieren und | Decodieren<=Problem

user-137
18.09.2006 15: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:

"Hallo" wird zu "8G5zwinkern" 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"zwinkern;
$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"zwinkern;
$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],"-"zwinkern; //Ergebniss = $D

if ($D=="1"zwinkern {
$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

Avatar user-255
18.09.2006 16:13

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

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 zwinkern

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

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm
user-137
19.09.2006 11:47

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

Avatar user-255
19.09.2006 13: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.

Those who can, do. Those who can't, teach. # Musik gehört dem Volk! # last.fm