[gelöst] Aufgabe zur XOR-Verschlüsselung



  • Hallo allerseits,

    ich bräuchte mal eine Rückmeldung zu meiner Lösung der folgenden Aufgbenstellung. Gegeben war ein Programmgerüst, das erweitert werden sollte, um die folgende Aufgabe zu erfüllen:

    Eingabe: Zu verschlüsselnde Zeichenkette text, Passwort key
    Ausgabe: Verschlüsselte Zeichenkette result
    Idee für Algorithmus: Wandle jedes Zeichen text[i] mit Hilfe einer bitweisen, exklusiven Oder-Operation (^in C++) um, bei der das Zeichen text[i] verknüpft wird mit dem Passwort-Zeichen key[i]. Falls i die Länge von key überschreitet, dann wird zyklisch der Anfang von key durchlaufen.

    Meine Lösung sieht nun folgendermaßen aus.

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string encrypt(string text, string key)
    {
    	string result;
    
    	// Anfang meiner Loesung
    
    	unsigned int x = 0;
    	result = text;
    
    	for (unsigned int i = 0; i < text.length(); i++)
    	{
    		result[i] = text[i] ^ key[x];
    		if(x == key.length())
    		{
    			x = 0;
    		}
    		x++;
    	}
    
    	cout << result << endl;
    
    	// Ende meiner Loesung
    
    	return result;
    }
    
    int main(int argc, char* argv[])
    {
    	string text = "Dies ist irgendein Text.";
    	string key  =  "irgendein Passwort";
    
    	// Anfang meiner Loesung
    
    	encrypt(text, key);
    
    	// Ende meiner Loesung
    
    	return 0;
    }
    

    Vielen Dank und noch einen schönen Tag,
    Zateha



  • - Du solltest Strings lieber per (const) Referenz übergeben, aber das habt ihr vielleicht noch nicht gemacht.
    - Es geht auch nur mit i: text[i] ^ key[i % key.length()]; (Stichwort: Modulo)
    - Die Ausgabe macht man möglicherweise nicht in der Funktion, sondern außerhalb. So z.B.:

    std::cout << encrypt(.., ..);
    

    Allerdings macht eine solche Ausgabe hier eh keinen Sinn, du weißt doch gar nicht, ob da wieder Text raus kommt. (Und höchstwahrscheinlich steht da dann nur Kauderwelsch.)



  • cooky451 schrieb:

    Allerdings macht eine solche Ausgabe hier eh keinen Sinn, du weißt doch gar nicht, ob da wieder Text raus kommt. (Und höchstwahrscheinlich steht da dann nur Kauderwelsch.)

    Zum Testen kann man ja Leerzeichen als key nehmen. Oder " !", das wechselt (hoffe ich) die Groß-Kleinschrift und verändert jeden fünften Buchstaben zu seinem Buddy-Nachbarn.



  • x++ muss vor das if



  • Vielen Dank für alle Antworten, vor allem für den Tipp mit Modulo.


Anmelden zum Antworten