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

3 Lösungen Lösungen öffentlich
#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"

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
vote_ok
von HalfDream (230 Punkte) - 26.05.2015 um 09:38 Uhr
Quellcode ausblenden C#-Code
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

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben