C# :: Aufgabe #87 :: Lösung #3
3 Lösungen

#87
One-Time-Pad Verschlüsselung
Anfänger - C#
von SymTech
- 13.02.2015 um 14:04 Uhr
Schreibe eine Konsolenanwendung die einen beliebigen Text nach One-Time-Pad ver- und entschlüsseln kann. Es sollen nur Buchstaben, Zahlen und Sonderzeichen vorkommen (also nicht die ganze ASCII-Palette verwenden).
Nutzen sie dabei nur den Namespace:
"System"
Nutzen sie dabei nur den Namespace:
"System"
Konsolenausgabe:
Text codieren oder decodieren? (c/d)
c
Text: Train your programmer
Schlüssel: Das ist ein Schlüssel
Ergebnis:
&yX\oK=)[h?vJ}+4°EEy4
#3

von HalfDream (230 Punkte)
- 26.05.2015 um 09:38 Uhr

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OneTimePad_Verschlüsselung { class Program { static int CodingSearchNumber(string Search, string[,] Coding) { Search = Search.ToUpper(); int Number = 0; for(int z1 = 0; Number == 0; z1++) { if(Coding[0,z1] == Search) { Number = Convert.ToInt32(Coding[1, z1]); } } return Number; } static string CodingSearchLetter(int Search, string[,] Coding) { string Letter = ""; for (int z1 = 0; Letter == ""; z1++) { if (Convert.ToInt32(Coding[1, z1]) == Search) { Letter = Coding[0, z1]; } } return Letter; } static char[] KeyUse(string key, int Length) { char[] ckey = new char[Length]; for (int z1 = 0; key.Length < Length; z1++) { Console.Write("Schlüssel: "); key = Console.ReadLine(); ckey = key.ToCharArray(0, key.Length); Console.Clear(); if (key.Length < Length) Console.WriteLine("Schlüssel zu kurz!!"); } return ckey; } static void Main(string[] args) { string[,] Coding = new string [2, 26] {{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}, {"1", "2", "3", "4", "5", "6", "7", "8", "9","10", "11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26"}}; string key = "", uncrypted, crypted = "", decrypted = "", decrypt; char[] cuncrypted, cdecrypt, ckey; int Length; char Auswahl; int keynumb, uncryptednumb, cryptednumb; string letter; Console.Write("Verschlüsseln(v) oder Entschlüsseln(e): "); Auswahl = Convert.ToChar(Console.ReadLine()); Console.Clear(); if(Auswahl == 'v') { Console.Write("Verschlüsseln: "); uncrypted = Console.ReadLine(); Length = uncrypted.Length; cuncrypted = uncrypted.ToCharArray(0, uncrypted.Length); Console.WriteLine(""); ckey = KeyUse(key, Length); for (int z1 = 0; z1 < uncrypted.Length; z1++) { keynumb = CodingSearchNumber(Convert.ToString(ckey[z1]), Coding); uncryptednumb = CodingSearchNumber(Convert.ToString(cuncrypted[z1]), Coding); cryptednumb = keynumb + uncryptednumb; if (cryptednumb > 26) cryptednumb -= 26; letter = CodingSearchLetter(cryptednumb, Coding); crypted += letter; } Console.WriteLine("Verschlüsselt: {0}", crypted); } else if(Auswahl == 'e') { Console.Write("Entschlüsseln: "); decrypt = Console.ReadLine(); Length = decrypt.Length; cdecrypt = decrypt.ToCharArray(0, decrypt.Length); Console.WriteLine(""); ckey = KeyUse(key, Length); for (int z1 = 0; z1 < decrypt.Length; z1++) { keynumb = CodingSearchNumber(Convert.ToString(ckey[z1]), Coding); uncryptednumb = CodingSearchNumber(Convert.ToString(cdecrypt[z1]), Coding); cryptednumb = uncryptednumb - keynumb; if (cryptednumb <= 0) cryptednumb += 26; letter = CodingSearchLetter(cryptednumb, Coding); decrypted += letter; } Console.WriteLine("Entschlüsselt: {0}", decrypted); } } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1