All pastes #811894 Raw Edit

Permutationsverschl.

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