All pastes #811919 Raw Edit

Permutationsverschl.

public text v1 · immutable
·published 2007-12-11 10:13 UTC
rendered paste body
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<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();
	}
}