C# :: Aufgabe #87

3 Lösungen Lösungen öffentlich

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

Lösungen:

1x
vote_ok
von eulerscheZhl (5230 Punkte) - 13.02.2015 um 17:47 Uhr
Quellcode ausblenden C#-Code
using System;

namespace trainYourProgrammer
{
	class MainClass
	{
		private static string alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789^!\"§$%&/()=?²³{[]}\\`´+*~#',.-;:_<>|° äöüÄÖÜß";

		private static string encrypt(string text, string key) {
			if (text.Length > key.Length)
				return "Passwort zu kurz!";
			char[] result = new char[text.Length];
			for (int i = 0; i < text.Length; i++) {
				result [i] = alphabet [(alphabet.IndexOf (text [i]) + alphabet.IndexOf (key [i])) % alphabet.Length];
			}
			return new string (result);
		}

		private static string decrypt(string text, string key) {
			if (text.Length > key.Length)
				return "Passwort zu kurz!";
			char[] result = new char[text.Length];
			for (int i = 0; i < text.Length; i++) {
				result [i] = alphabet [(alphabet.IndexOf (text [i]) - alphabet.IndexOf (key [i]) + alphabet.Length) % alphabet.Length];
			}
			return new string (result);
		}

		public static void Main(string[] args) {
			string mode;
			do {
				Console.WriteLine ("Text codieren oder decodieren? (c/d)");
				mode = Console.ReadLine ();
			} while (mode != "c" && mode != "d");

			Console.Write ("Text: ");
			string text = Console.ReadLine ();
			Console.Write ("Schlüssel: ");
			string key = Console.ReadLine ();
			Console.WriteLine (mode == "c" ? encrypt (text, key) : decrypt (text, key));

		}
	}
}
22 Kommentare
vote_ok
von Mentalist999 (680 Punkte) - 19.02.2015 um 04:15 Uhr
Quellcode ausblenden C#-Code
        public static string Encrypt(string s)
        {
            string Result = "";
            Random Rndm = new Random();

            foreach (char c in s)
            {
                if ((int)c < 32 | (int)c > 125)
                    continue;

                int Verschiebung = Rndm.Next(32, 126), 
                    NewPos       = (int)c + Verschiebung;

                Result += Char.ConvertFromUtf32(Verschiebung) 
                        + Char.ConvertFromUtf32( (NewPos > 125) ? NewPos - 94 : NewPos );
            }

            return Result;
        }

        public static string Decrypt(string s)
        {
            string Result = "";

            for (int i = 0; i < s.Length; i += 2)
            {
                int OldPos = (int)s[i + 1] - (int)s[i];

                Result += Char.ConvertFromUtf32( (OldPos < 32) ? OldPos + 94 : OldPos );
            }

            return Result;
        }
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);

            }
        }
    }
}
2107539

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.