huhus..
dein selbstgecodetes xor tauscht gaaaaaanz oft nämlich strlen($key) mal und überhaupt ganz schön durcheinander... weil du mit den verschachtelten schleifen genau strlen($string) mal die gesamte ersetzung durchläufst...
$text ^ $passwort; muss auch fehlschlagen, da dort die 1 und 0 als zeichen interpretiert werden und schon alleine geweils 1 oder zwei byte (je nach zeichensatz) also 8 oder 16 bit lang sind... insofern bekommst du zeichensalat.. das ist zwar intern völlig korrekt und lässt sich mit einem weiteren xor und gleichem key auch wiedr decodieren, nur ist das ergebnis natürlich nicht lesbar, weil der zeichensatz n bischen größer ist als nur 1 und 0 ....
mein vorschlag wäre folgender:
PHP-Code:
function X_Eor($string, $key)
{
for($i=0; $i<strlen($string); $i++)
{
$string[$i] = ( $string[$i] + $key[$i] ) % 2;
//evtl geht hier auch $string[$i] = $string[$i] ^ $key[$i]; ... müsste man ausprobieren
}
return $string;
}
liefert demnach
(0 + 0) % 2 = 0
(1 + 0) % 2 = 1
(0 + 1) % 2 = 1
(1 + 1) % 2 = 0
denzufolge korrektes entweder oder
randbedingungen: key ist mindestens so lang wie string...
falls key kürzer sein darf, muss $key vorher noch verlängert werden, etwa so:
PHP-Code:
while (strlen($key)<strlen($string)) $key.=$key;
dann sollte es laufen...
greetz, high