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