C# :: Aufgabe #33
9 Lösungen

Mit Caesar Chiffre ent- und verschlüsseln
Anfänger - C#
von Dome
- 03.01.2013 um 01:30 Uhr
Schreiben Sie ein Programm, indem Sie mit Hilfe der Caesar Chiffre einen beliebigen Text ent- und verschlüsseln können. Zuvor muss der Text und die Anzahl der Verschiebung angegeben werden. Groß- und Kleinschreibung muss nicht beachtet werden.
Konsolenausgabe:
Geben Sie den Text ein: Beispielwort
Um wie viele Stellen soll verschoben werden: 1
Ergebnis: Cfjtqjfmxpsu
Lösungen:

void main() { Console.Write("Geben Sie den Text ein: "); string inputText = Console.ReadLine(); Console.Write("Um wie viele Stellen soll verschoben werden: "); string inputStellen = Console.ReadLine(); int stellen = int.Parse(inputStellen) % 26; string output = Chiffre(inputText, stellen); Console.WriteLine("Ergebnis: {0}", output); } private static string Chiffre(string input, int stellen) { string output = string.Empty; foreach (char c in input) { char x = (char)(c+stellen); output += x.ToString(); } return output; }

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Caesar { class Program { static void Main(string[] args) { Console.Write("Geben Sie den Text ein: "); string klartext = Console.ReadLine().ToLower(); Console.Write("Um wie viele Stellen soll verschoben werden: "); int nummer = Convert.ToInt32(Console.ReadLine()); string chiffre = ""; for(int i = 0; i < klartext.Length; i++) { char c = Convert.ToChar(klartext[i] + nummer); if (c > 'z') { c = (char)(c - 26); } else if (c < 'a') { c = (char)(c + 26); } chiffre += c; } Console.Write("Ergebnis: " + chiffre); } } }

using System; namespace CaesarVerschluesselung { class Program { static void Main(string[] args) { string text = ""; short stellen = 0; byte buchstabe = 0; string ergebnis = ""; Console.Write("Geben Sie den Text ein: "); text = Console.ReadLine(); Console.Write("Um wie viele Stellen soll verschoben werden?\n(positiv = verschlüsseln, negativ = entschlüsseln)"); do { Console.Write("Stellen angeben: "); } while (!short.TryParse(Console.ReadLine(), out stellen)); if (stellen < 0) stellen += 26; while (stellen < 0) stellen += 25; while (stellen > 25) stellen -= 25; foreach (Char i in text) { buchstabe = (byte) i; if(65 <= buchstabe && buchstabe <= 90) for (int j = 0; j < stellen; j++) { if (buchstabe == 90) buchstabe = 64; buchstabe++; } if(97 <= buchstabe && buchstabe <= 122) for (int j = 0; j < stellen; j++) { if (buchstabe == 122) buchstabe = 96; buchstabe++; } ergebnis += (char) buchstabe; } Console.WriteLine("Ergebnis: {0}", ergebnis); } } }
Ich hab tatsächlich richtig lange überlegen müssen, wie ich einen einzelnen char in der ASCII-Tabelle verschieben kann ... :D
C#-Code

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CaesarChiffre { class Program { static void Main(string[] args) { Console.WriteLine("Geben Sie ihren Text ein: "); string eingabe = Console.ReadLine(); Console.WriteLine("Um wieviel Stellen soll verschoben werden?"); int number; bool valid = false; do { valid = int.TryParse(Console.ReadLine(), out number); } while (valid != true); StringBuilder strBuilder = new StringBuilder(eingabe); int letterAscii; for (int i = 0; i < eingabe.Length; i++) { letterAscii = strBuilder[i]; letterAscii += number; strBuilder[i] = (char)letterAscii; } string ausgabe = strBuilder.ToString(); Console.WriteLine("Die Ausgabe: {0}", ausgabe); Console.ReadLine(); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CaesarChiffre { class Program { static void Main(string[] args) { string eingabeText, erg = ""; char[] text; int stellenVerschieben; Console.Write("Geben Sie den Text ein: "); eingabeText = Console.ReadLine(); text = new char[eingabeText.Length]; text = eingabeText.ToCharArray(); Console.Write("Um wie viele Stellen soll verschoben werden: "); stellenVerschieben = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i < eingabeText.Length; i++) { if ((stellenVerschieben / 26) != 0) while ((stellenVerschieben / 26) != 0) stellenVerschieben -= 26; if (Convert.ToInt32(text[i]) >= 65 && Convert.ToInt32(text[i]) <= 90) if ((Convert.ToInt32(text[i]) + stellenVerschieben) > 90) erg += Convert.ToString(Convert.ToChar(64 + ((Convert.ToInt32(text[i]) + stellenVerschieben) - 90))); // 96+..., da a = 97 -> wird ansonsten übersprungen else erg += Convert.ToString(Convert.ToChar(Convert.ToInt32(text[i]) + stellenVerschieben)); else if ((Convert.ToInt32(text[i]) + stellenVerschieben) > 122) erg += Convert.ToString(Convert.ToChar(96 + ((Convert.ToInt32(text[i]) + stellenVerschieben) - 122))); // 96+..., da a = 97 -> wird ansonsten übersprungen else erg += Convert.ToString(Convert.ToChar(Convert.ToInt32(text[i]) + stellenVerschieben)); } Console.Write("Ergebnis: " + erg); Console.Read(); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TrainYourProgrammer33 { class Program { static void Main(string[] args) { string neuerText = ""; int ascii; Console.Write("Geben Sie den Text ein: "); string text = Console.ReadLine(); Console.Write("Um wie viele Stellen soll verschoben werden: "); int verschieben = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i <= text.Length - 1; i++) { ascii = Convert.ToInt32(text[i] + verschieben); if (ascii > 64 && ascii < 91 || ascii > 96 && ascii < 123 ) { neuerText += Convert.ToChar(ascii); } else { ascii = ascii - 26; neuerText += Convert.ToChar(ascii); } } Console.WriteLine(neuerText); Console.ReadKey(); } } }

static void Aufgabe_33() { string eingabe, ausgabe = ""; int k, verschieben, _verschieben; char buchstabe; Console.Write("Geben Sie den Text ein: "); eingabe = Console.ReadLine(); Console.Write("Um wie viele Stellen soll verschoben werden: "); verschieben = Convert.ToInt16(Console.ReadLine()); _verschieben = verschieben; for (int i = 0; i <= eingabe.Length - 1; i++) { k = (int)eingabe[i]; verschieben = _verschieben; if (k >= 65 && k <= 90) { if (k + verschieben > 90) // funktioniert bei negativem verschieben nicht!! { verschieben -= (90 - k); k = 64 + verschieben; buchstabe = (char)k; ausgabe += buchstabe; } else { k += verschieben; buchstabe = (char)k; ausgabe += buchstabe; } } else if (k >= 97 && k <= 122) { if (k + verschieben > 122) // funktioniert bei negativem verschieben nicht!! { verschieben -= (122 - k); k = 96 + verschieben; buchstabe = (char)k; ausgabe += buchstabe; } else { k += verschieben; buchstabe = (char)k; ausgabe += buchstabe; } } } Console.WriteLine("Ergebnis: {0}", ausgabe); }
NET Core 3.x; C# 8.x
C#-Code

using System; using System.Linq; namespace CS_Aufgabe_33_Caesar { class Program { static void Main(string[] args) { var lstChar = Enumerable.Range('A', 26).Select(x => (char)x).ToList(); char GetChar(char c, int v) => lstChar.Contains(c) ? lstChar[(lstChar.IndexOf(c) + v) % 26] : c; var arr = "Hslh qhjah lza".ToUpper().ToCharArray(); Enumerable.Range(0, 25).Select(y => string.Join("", arr.Select(x => GetChar(x, y)).ToList())).ToList().ForEach(Console.WriteLine); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Caesarverschluesselung { class Program { static void Main(string[] args) { Console.Write("Please write your Text: "); string userText = Console.ReadLine(); int userNumber = TryGetInt32("how many digits should the text move?: "); Console.WriteLine("\n Here is your encrypted Text: " + CaesarChiffre(userText, userNumber)); Console.ReadKey(); } public static int TryGetInt32(string userInput) { Console.Write(userInput); int counter = 1; while (counter <= 7) { try { return Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { counter++; } } throw new Exception(); } private static string CaesarChiffre(string userText, int userNumber) { string output = string.Empty; foreach(char abc in userText) { char x = (char)(abc + userNumber); output += x.ToString(); } return output; } } }