Diese Art von Verschlüsselung ist nicht sehr sicher! Deshalb hab ich dir mal ein Beispiel gebaut, was etwas sicherer ist, weil dabei immer 2 Zeichen auf einmal verschlüsselt werden. Du kannst das Tool auf beliebige Blocklängen anpassen. Wenn du deutsch verschlüsseln willst, müssen die Encodings geändert werden!
public static void Main(string[] args) { string text = "Hello World"; string key = "1234fgf";
Console.WriteLine(text);
string e = Encode(text, key); Console.WriteLine(e);
string d = Encode(e, key); Console.WriteLine(d);
Console.Write("Press any key to continue . . . "); Console.ReadKey(true); }
for(int x = 0; x < b1.Length; x += 2) { t = (short)((b1[x] << 8) | (b1[x+1])); k = (short)((b2[x%b2.Length] << 8) | (b2[(x+1)%b2.Length])); t = (short)(t ^ k); unchecked{ b1[x] = (byte)(t >> 8); b1[x+1] = (byte)t;} } return Encoding.GetEncoding("ASCII").GetString(b1); }
Die Methode Encode wird auch für die Entschlüsselung verwendet! Ev. kannst du die Sicherheit noch erhöhen, indem du einen CBC-Modus davor setzt. Schau einfach mal bei Wikipedia nach CBC.
@Falkner: Dein Code sieht gut aus! Nutzer sollten aber unbedingt die Blöcke auf 8 Byte erhöhen (hattest du ja schon in Möglichkeit gesetzt) und dann statt short auf ulong wechseln.
@Wittgenstein: Da es hier um eine einfache XOR-Verstndnisangelegenheit ging, habe ich auch nur ein einfaches Sample beigefügt. Deine vorgeschlagenen Blockgrössen sind schon etwas sicherer. Die Geschwindigkeit kann aber leiden. Wenn nur etwas leicht unleserlich gemacht werden soll, reicht meine Lösung (in Verbindung mit CBC) aus.
Die XOR-Verschlüsselung wird in d. Regel so vorgenommen, dass nacheinander jeder Buchstabe v. Text (T) mit einem Buchstaben vom Schlüssel (K) XOR verbunden wird. Das daraus resultierende Zeichen ist dann C:
T xor K = C
Entschlüsselt wird in der Regel mit derselben Methode auf die folgende Art:
C xor K = T
Ich bau dir gerade mal ein kleines Code-Beispiel - dauert 5 Minuten.