Probleme mit XOR

gabifi

Mitglied
Habe mir eine kleine Methode geschrieben, mit der ich einen String XOR ver- und entschlüsseln kann. Jedoch habe ich bemerkt, dass bei längeren Wörtern es ab und zu Probleme gibt. Meine Methode schaut so aus:
Code:
static CString XORCrypt(char* text)
{
	char ergebnis[32] = "";
	char* key = "2ggdhgas78hjsnadmcxy98euksdn21e";


	int keylen = strlen(key);
	int textlen= strlen(text);

	for(int t = 0, k = 0; t < textlen; t++, k++)
	{
		if(k == keylen)
			k=0;

		ergebnis[t] = (text[t] ^ key[k]);
	}
	CString str;
	str.Format("%s",ergebnis);

	return CString(ergebnis);
}

Will ich z.B. G321IQ98Zd5Gbsa56 verschl+sslen und entschlüsslen, bleibt nur noch G321IQ98Zd5Gbs übrig, es fehlen die letzten beiden. Weiß einer wieso.
Wenn ich nen CString hab, dann übergebe ich es so, aber das müsste ja passen
Code:
CString input;
input = "G321IQ98Zd5Gbsa56";
wsprintf(sz,"%s",input);

Vielleicht sieht ja einen nen dummern Fehler, den ich gemacht hab.
Gabriel
 
moin


Das liegt daran das wenn du den String verschlüsselt liegt in ergbnis[14] eine 0, danach geht es aber noch weiter. Wegen der Null wird der String nur von ergebnis[0] bis ergebnis[14] an den CString übergeben.

Lerne ein bsichen was über die benutzung des Debuggers, dann ist eine solche Fehlersuche ein Kinderspiel.


mfg
umbrasaxum
 
Ok, habe ich jetzt au gesehen.

Kann man sowas denn umgehen? Diese 0 wird mir ja immer nen Strich durch die Rechnung machen, au für den Fall dass ich zum Rückübersetzen mal strlen(ergebnis) aufrufe, ohne den Umweg über ein CString zu gehen.

Is da mein XOR-Algorithmus nur schlecht oder besteht das Problem allgemein?

Gabriel
 
moin


Das Problem wirst du bei XOR Verschlüsselungen immer haben. Du könntest ja an den Anfang des String die Länge schreiben und durch ein Zeichen vom Rest trennen.

Verschlüsselt:"ajdnfgert"
Mit Länge: "9;ajdnfgert"


mfg
umbrasaxum
 
Zurück