Entwickler-Ecke
Sonstiges (.NET) - C# Caesar-Encryption
zocker_max - So 29.11.09 15:20
Titel: C# Caesar-Encryption
Hallo ich habe ein Problem mit dem zugriff auf "public string encrypt (string text, string schlüssel)"
vom Hauptprogramm aus. Ich möchte den Klartext und den Schlüssel eingeben und die Chiffre erhalten.
Bitte helft mir!
C#-Quelltext
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace Caesar_Verschlüsselung { public class Encrypt { public string encrypt (string text, string schlüssel) { string encrypted = string.Empty; int keyindex = 0; foreach (char c in text) { int asciinr = (int)c; asciinr += (int)schlüssel[keyindex]; if (asciinr > 255) asciinr -= 255; encrypted += (char)asciinr; keyindex++; if (keyindex > schlüssel.Length - 1) keyindex = 0; } return encrypted; } } class Program { static void Main() { string schlüssel; string klartext; string chiffre; Console.WriteLine("Caesar-Verschlüsselung"); Console.WriteLine("Klartext bitte jetzt eingeben:"); klartext = Console.ReadLine(); Console.WriteLine("Key bitte jetzt eingeben:"); schlüssel = Console.ReadLine(); Console.WriteLine("Klartext wird verschlüsselt."); Encrypt entschlüsseln = new Encrypt(klartext, schlüssel); Console.WriteLine("Die Chiffre lautet:"); Console.WriteLine(chiffre); Console.ReadKey();
} } } |
Moderiert von
Christian S.: C#-Tags hinzugefügt
Kha - So 29.11.09 19:21
:welcome:
Da hast du etwas falsch verstanden. Ein Konstruktor besitzt den gleichen Namen wie seine Klasse, es müsste also
Encrypt heißen. Ich denke aber nicht, dass du die Methode überhaupt als Konstruktor
willst, denn diese können logischerweise keinen Rückgabewert haben. Also nimmst du stattdessen den parameterlosen Standardkonstruktor und rufst "encrypt" auf dem zurückgegebenen Objekt auf:
C#-Quelltext
1: 2:
| Encrypt entschlüsseln = new Encrypt(); string chiffre = entschlüsseln.encrypt(klartext, schlüssel); |
(Methoden bitte trotzdem groß schreiben, hier also am besten umbenennen).
Ansonsten könntest du "encrypt" auch als
static kennzeichnen, dann sähe der Aufruf so aus:
C#-Quelltext
1:
| string chiffre = Encrypt.encrypt(klartext, schlüssel); |
zocker_max - So 29.11.09 20:31
Danke für deine Hilfe. ich nehme die Lösung:
Encrypt entschlüsseln = new Encrypt();
chiffre = entschlüsseln.encrypt(klartext, schlüssel);
zocker_max - So 29.11.09 20:58
So sieht der fertige Quelltext für Caesar-Chiffre aus. Nochmal thx!!!
C#-Quelltext
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107:
| using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace Caesar_Verschlüsselung { public class Encrypt {
public string encrypt(string klartext, string schlüssel) { string encrypted = string.Empty; int keyindex = 0; foreach (char c in klartext) { int asciinr = (int)c; asciinr += (int)schlüssel[keyindex]; if (asciinr > 255) asciinr -= 255; encrypted += (char)asciinr; keyindex++; if (keyindex > schlüssel.Length - 1) keyindex = 0; } return encrypted; } }
public class Decrypt {
public string decrypt(string chiffre, string schlüssel) { string decrypted = string.Empty; int keyindex = 0; foreach (char c in chiffre) { int asciinr = (int)c; asciinr -= (int)schlüssel[keyindex]; if (asciinr < 0) asciinr = 255 + asciinr; decrypted += (char)asciinr; keyindex++; if (keyindex > schlüssel.Length - 1) keyindex = 0; } return decrypted; } }
class Program { static void Main() { string schlüssel; string klartext; string chiffre; string s; Start: Console.WriteLine("Caesar-Verschlüsselung"); Console.WriteLine("verschlüsseln (v)"); Console.WriteLine("entschlüsseln (e)"); s = Console.ReadLine(); switch (s) { case "v": { Console.WriteLine("Klartext bitte jetzt eingeben:"); klartext = Console.ReadLine(); Console.WriteLine("Key bitte jetzt eingeben:"); schlüssel = Console.ReadLine(); Console.WriteLine("Klartext wird verschlüsselt."); Encrypt entschlüsseln = new Encrypt(); chiffre = entschlüsseln.encrypt(klartext, schlüssel); Console.WriteLine("Die Chiffre lautet:"); Console.WriteLine(chiffre); Console.ReadKey(); break; } case "e": { Console.WriteLine("Chiffre bitte jetzt eingeben:"); chiffre = Console.ReadLine(); Console.WriteLine("Key bitte jetzt eingeben:"); schlüssel = Console.ReadLine(); Console.WriteLine("Klartext wird entschlüsselt."); Decrypt verschlüsseln = new Decrypt(); klartext = verschlüsseln.decrypt(chiffre, schlüssel); Console.WriteLine("Der Klartext lautete:"); Console.WriteLine(klartext); Console.ReadKey(); break; } default: goto Start; } } } |
Moderiert von
Christian S.: C#-Tags hinzugefügt
JasonDelife - So 29.11.09 21:17
Sollte man hier nicht eine Klasse CaesarCryptor machen und dort Encrypt() und Decrypt unterbringen?
Grüße, JasonDelife.
zocker_max - Mo 30.11.09 10:29
Ja das ist besser aber nicht wirklich nötig. Aber trotzdem thx.
[SOLVED]
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!