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
2107717

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.