C# XOR Verknüpfung zweier char-Arrays

Amon-Rê

Mitglied
Hallo,

Bin grad dabei mit C# ein kleines Prog zu schreiben was Dateien in einem Verzeichnis verschlüsseln soll. Die Erstelllung der Verzeichnis-Struktur funktioniert einwandfrei nur habe ich leider auch nach intensiver Suche nichts gefunden wie ich die, aus der Datei, ausgelesenen Daten mit Hilfe eines Passwortes über XOR-Verschlüsseln kann.
Wenn ich XOR auf zwei chars anwende bekommen ich immer bloß eine Integer-Zahl raus. Hat vll jemand ne Idee wie ich das Realisieren könnte

Code:
  private String decode(String text, String passwd)
  {
  	char[] text2 = text.ToCharArray();
  	char[] passwd2 = passwd.ToCharArray();
  	char[] code = new char[text.Length];
  
  	for(int i=0; i<text2.Length; i++)
  	{
  		// Hier müsste die XOR-Verknüpfung
  		// Bei C++ gings in etwa so:
  		// code[i] = text2[i] ^ passwd2[i%passwd.Length];
  	}
  
  	... // code[] als String zurückgeben
  }

Weiß jemand wie man das unter C# lösen kann?
 
naja es wird wohl ein Integerwert rauskommen, der nicht 255 überschreiten sollte und somit quasi der char-Wert ist. Ob das da überhaupt unten funktioniert, weiß ich nicht, aber wenn der dir einen Integer-Wert generiert, kannst du den Krams doch einfach in dein Char-Array reinpacken, genauso wie du es unten hast. Wahrscheinlich kann er es aber nicht von selbst casten. C kommt damit ja so klar. Hier musst du sowas versuchen:

Code:
code[i] = Convert.ToChar(text2[i] ^ passwd2[i%passwd.Length]);

Guck dir jedenfalls mal die Klasse Convert an. Die sollte normalerweise ohne zusätzliche Imports da sein. Diese Klasse liefert dir viele statische Cast-Methoden. Da ich jetzt kein .NET aufm Laptop habe, weiß ich nicht, ob die Parameter gehen, deswegen musst du mal so ausprobieren, ob es geht.

Viel Glück,

NRFi ;)
 
Hat zwar nich ganz das gebracht was i brauchte, hat mir aber den richtigen Denk-Anstoss gegeben. Da man bei C++ 'char' durchaus zum Byteweisen auslesen nutzen konnte, hab ich mich nen bissl auf das 'char' verrannt. Bei C# sollte man für sowas nen FileStream nutzen und das ganze gleich als byte-Array auslesen.
Das mit der Convert-Klasse is trotzdem notwendig, dann halt bloß mit "ToByte()"

Vielen Dank für den genialen Denkanstoss. Wenn das Projekt mal fertig is, stell ich den Code gerne hier zur Verfügung, für die, die sowas interessiert.
 
mal eine andere Frage, du hast dir da eine Verschlüsselungsfunktion gebaut - warum nimmst du nicht die Funktionalitäten diesbezüglich aus dem .NET Framework?
System.Security.Cryptography bietet da einiges, was auch sicherer als eine XOR-Verschlüsselung ist :)
 
Sorry, das Antwort bissl spät kommt.
ging bei dem Beispiel nich um besonders große Sicherheit, war bloß Teil einer Aufgabe von einem meiner Profs, vin daher schien mir das am simpelsten.
 
Zurück