rendered paste bodyusing 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<l; z++)
for (int t = 0; t < 4;t++ )
text += Spalte[arSchlüssel[t]-1][z];
Console.WriteLine("Klartext> "+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();
}
}