XOR Encode / Decoding verschluckt Zeichen....
-
Hallo liebes Forum,
Ich bin per Google auf eine XOR encode decode Funktion gestoßen, die soweit auch funktioniert.
Nur gibt es ein Problem, wenn ich ihr einen String übergebe wie z.B.
"1234567890.,abcdefgh Dann eine Luecke"
Komischerweise gibt er mir nur "12345678" vom oberen String zurück, verschlüsselt versteht sich. Wenn ich den verschlüsselten String anschließend wieder entschlüssel, tut er dies für den kompletten String, soweit er ihn halt verschlüsselt hat.Ich benutze Visual Studio 2008 und fange gerade erst an, mich mit C zu beschäftigen, über jede Hilfe warum diese Funktion teilweise mein halbes Char verschluckt, wäre ich sehr erfreut.
int XOR_Encode_Decode(char *paczInput, int iInputSize, char *paczKey, int iKeySize, char *paczOutput) { int liIndex=0; while (liIndex<iInputSize) { *(paczOutput+liIndex) = (*(paczInput+liIndex) ^ *(paczKey+(liIndex % iKeySize))); liIndex++; } *(paczOutput+liIndex) = '\0'; return 1; }
Mfg Der_Mod
-
Und wie rufst du die Funktion auf?
-
Und was passiert, wenn das verschlüsselte Zeichen rein "zufällig" eine Null ergibt?
-
Diesen "Zufall" kann man ja nachvollziehen, wenn er mein Frage beantwortet.
-
Aus der Fehlerbeschreibung bin ich mir sogar sehr sicher, dass es daran liegt.
Wobei es kein Fehler ist, er erwartet nur ein anderes Verhalten.Aber an den Fragesteller. Findest du den Code nicht so auch schöner, übersichtlicher und sicherer?
void XOR_Encode_Decode(char *paczInput, int iInputSize, char *paczKey, int iKeySize, char *paczOutput) { int liIndex; for (liIndex = 0; liIndex < iInputSize; ++liIndex) paczOutPut[liIndex] = paczInput[liIndex] ^ paczKey[liIndex % iKeySize]; paczOutput[liIndex] = '\0'; }
Einen Rückgabe, die keinen Wert hat, ist unnötig.
Man sollte übrigens in solchen Fällen, wo man nicht mehr sicher sein kann, dass eine Null vorkommt, keine String-Funktionen verwenden. Auf diese Weise worden schon ganze Spielkonsolen gehackt, weil man statt einen Byteweisen-Vergleich einen Stringvergleich gemacht hat. Bei Nintendo war das, falls es jemanden interessiert.
-
Noch schöner wäre der Code wenn man die ungarischen Präfixe weglassen würde.