using System; class Program { static int[] arSchlüssel = {1,2,3,4}; // Globaler Schlüsselsatz static int[] invSchlüssel = { 1, 2, 3, 4 }; static void ShowMenu() // Hauptmenu { Console.Clear(); string Schlüssel = "\n Schlüssel: ("; for (int i = 0; i < 4; i++) Schlüssel += arSchlüssel[i].ToString() + ", "; Console.WriteLine(Schlüssel.Remove(Schlüssel.Length-2)+")\n"); Console.WriteLine(" - Menu - \n\n" +"1 - Verschlüsselung\n" +"2 - Entschlüsselung\n" +"3 - Schlüssel ändern\n" +"4 - Programm beenden\n"); Console.Write("Wahl> "); switch (Console.ReadKey(false).KeyChar) { case '1': Verschlüsselung(); break; case '2': Entschlüsselung(); break; case '3': SchlüsselÄndern(); break; case '4': Console.WriteLine("\nTschüüs"); Console.ReadKey(); break; default: Console.WriteLine("\nDieser Menupunkt steht nicht zu verfügung!"); ShowMenu(); break; } } static void Verschlüsselung() { 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[invSchlüssel[0] - 1] + Spalte[invSchlüssel[1] - 1] + Spalte[invSchlüssel[2] - 1] + Spalte[invSchlüssel[3] - 1]); Console.Read(); ShowMenu(); } static void Entschlüsselung() { 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 SchlüsselÄndern() { 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 (arSchlüssel[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); arSchlüssel[i] = Position; } //Inversen Schlüssel bilden for (int z = 0; z < 4; z++) invSchlüssel[arSchlüssel[z] - 1] = z + 1; Console.WriteLine("\nSchlüssel erfolgreich geändert"); ShowMenu(); } static void Main(string[] args) { Console.WriteLine("Verschlüsselungsprogramm"); ShowMenu(); } }