using System; class Program { static int[] key_global = {1,2,3,4}; // Globaler Schlüsselsatz static int[] key_inverted = { 1, 2, 3, 4 }; static void DrawMenu() { string key_draw = "("; Console.Clear(); Console.WriteLine("+--------------------------------------+"); Console.WriteLine("| Schlüssel: |"); Console.WriteLine("+--------------------------------------+"); Console.WriteLine("| 1 - Verschlüsselung |"); Console.WriteLine("| 2 - Entschlüsselung |"); Console.WriteLine("| 3 - Schlüssel ändern |"); Console.WriteLine("| 4 - Programm beenden |"); Console.WriteLine("+--------------------------------------+"); Console.CursorLeft = 13; Console.CursorTop = 1; for (int i = 0; i < 4; i++) key_draw += key_global[i].ToString() + ", "; Console.WriteLine(key_draw.Remove(key_draw.Length-2)+")\n"); } static void ShowMenu() // Hauptmenu { DrawMenu(); switch (Console.ReadKey(false).KeyChar) { case '1': Encryption(); break; case '2': Decryption(); break; case '3': ChangeKey(); break; case '4': break; default: ShowMenu(); break; } } static void Encryption() { string[] Spalte = {"","","",""}; string Klartext; bool fertig = false; Random Zufall = new Random(); Console.Clear(); do //Einlesen des Klartextes + Validierung { Console.Write("\nKlartext> "); Klartext = Console.ReadLine(); } while (Klartext.Length == 0); int i = 0; // Aufteilung des Klartext-Strings in vier Spalten for (int z = 0; z < 4;z++ ) { if (fertig) { //Padding Spalte[z] += Convert.ToString(Convert.ToChar(Zufall.Next(65, 90))); fertig = true; } else Spalte[z] += Convert.ToString(Klartext[i]); if (++i > Klartext.Length - 1) fertig = true; if (z == 3 && !fertig) z = -1; } // Ausgabe der Spalten-Strings in der durch den Schlüssel vorgegebenen Reihenfolge Console.WriteLine("Verschlüsselt> " + Spalte[key_inverted[0] - 1] + Spalte[key_inverted[1] - 1] + Spalte[key_global[2] - 1] + Spalte[key_inverted[3] - 1]); Console.Read(); ShowMenu(); } static void Decryption() { string text; string[] Spalte = {"","","",""}; Console.Clear(); do //Einlesen des Chiffriertextes + Validierung { Console.Write("\nChiffriertext> "); text = Console.ReadLine(); } while (text.Length == 0 || text.Length % 4 != 0); int l = text.Length / 4; // Aufteilen in vier Blöcke for (int i=0; i<4;i++) Spalte[i] = text.Substring(i*l,l); text = ""; // Blöcke Buchstabe für Buchstabe in der durch den Schlüssel festgelegten Reihenfolge auslesen for (int z=0; z "+text); // Ausgabe ShowMenu(); } static void ChangeKey() { int Position = 0; bool ungültig; Console.Clear(); for (int i = 0; i < 4; i++) { do { ungültig = false; Console.Write("\n" + Convert.ToString(i + 1) + ". Position> "); try { Position = Convert.ToInt32(Console.ReadKey(false).KeyChar.ToString()); } catch { ungültig = true; } if (!ungültig && Position > 0 && Position < 5) { for (int z = 0; z < i; z++) if (key_global[z] == Convert.ToInt32(Position)) { ungültig = true; Console.Write(" Schlüsselziffer bereits verwendet!"); break; } } else { ungültig = true; Console.Write(" Bitte nur Zahlen zwischen 1 und 4 eingeben!"); } } while (ungültig); key_global[i] = Position; } //Inversen Schlüssel bilden for (int z = 0; z < 4; z++) key_inverted[key_global[z] - 1] = z + 1; Console.WriteLine("\nSchlüssel erfolgreich geändert"); ShowMenu(); } static void Main(string[] args) { Console.CursorVisible = false; ShowMenu(); } }