Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Cäsar-Verschlüsselung

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Delphi/Kylix
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jesus
Gast





BeitragVerfasst am: 19. Jun 2005 16:36    Titel: Cäsar-Verschlüsselung Antworten mit Zitat

Muss ein Programm zum ver- und entschlüsseln entwickeln. Bin in Delphi nicht mehr so gängig, Pseudo-Code folgt. Man kann wahrscheinlcih viele Schritte zusammenfassen, aber wir haben in letzter Zeit viel mit Assembler gearbeitet...

1. Was ich erstmal bestätigt haben muss ist mein theoretischer Ansatz
Verschlüsseln:
- 3 Edit-Felder, (a) für Text, (b) für Schlüssel, (c) für verschlüsselten Text, Button zum Verschlüsseln
- Schlüssel in (b) als Zahlangeben (Verschiebungszahl - var vz)
- OnClick: Text aus (a) wird in ASCii-Code verwandelt, var vz wird addiert, von ASCii in Buchstabe umgewandelt und ausgegeben. Will dieses mit einer For-To Schleife machen.
Code:
z := length(editA) //glaube das war so um chars zu zählen.
for i:=1 to z do
begin
y := read.editA(i);
x := ord(y);
w := x + vz;
v := char(w);
write.editC(v);
inc(i);

Entschlüsseln:
- Die selben Edit-Felder, Button zum Entschlüsseln
- Schlüssel wird in (b) geschrieben (Verschiebungzahl - var vz)
- OnClick: Text aus (c) wird in ASCii-Code verwandelt, var vz wird subtrahiert, von ASCii in Buchstabe umgewandelt und ausgegeben. Code eigentlich gleich wie oben, außer:
Code:
w := x - vz;

Ist das alles richtig so? Oder habe ich etwas verpasst?

2. Ich bin mir unsicher darüber ob ich zwischen groß und klein Buchstaben unterscheiden muss, wenn ja müsste doch ein If-Then genügen, oder? Vielleicht lieber Repeat, while, until?

3. Warum ist Pascal und Delphi getrennt, ist doch das Gleiche

4. Danke für jede Hilfe
Nach oben
Erchamion



Anmeldungsdatum: 07.06.2005
Beiträge: 13

BeitragVerfasst am: 19. Jun 2005 18:38    Titel: Antworten mit Zitat

1. Da stimmt imo einiges nicht, obwohl das Prinzip der Caesarverschlüsselung richtig ist. Sieh dir am besten nochmal die Klasse TEdit, for-Schleifen und Strings an.
Ansonsten: Warum probierst du den Quelltext nicht einfach aus, der Compiler wird dir schon die Fehler anzeigen ...

2. Ich würde vor dem codieren alles mit lowercase() in Kleinbuchstaben verwandeln.

3. Pascal ist nicht das selbe wie Delphi. Pascal ist imho wesentlich älter, unterstützt keine Objektorientierung und keine Windowsoberflächen. Delphi ist quasi eine Erweiterung zu Pascal.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ED209



Anmeldungsdatum: 30.05.2005
Beiträge: 122

BeitragVerfasst am: 21. Jun 2005 11:20    Titel: Antworten mit Zitat

1. Hmm besteht der Caesar-Schluessel nur aus einer Zahl?
2. Muss da nicht irgendwo noch ein Modulo in den Code?
3. Wirklich zeitgemaess ist der Chiffre nicht :)

_________________
+++++++++++++[>++++>+<<-]>.--.>---.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tobias



Anmeldungsdatum: 15.02.2005
Beiträge: 149

BeitragVerfasst am: 22. Jun 2005 16:41    Titel: Antworten mit Zitat

Ja, der Casesar-Schlüssel besteht aus einer Zahl. Die Zahl gibt an um wieviele Buchstaben das Alphabet verschoben wird.

Dann darf man nicht einfach nur addieren sondern muss auf Überträge achten.
Wenn ich in ASCII einfach eine Zahl auf "Z" addiere, dann lande ich außerhalb des Alphabets. Du musst aber nach "Z" wieder bei "A" anfangen.

Am einfachsten ist es, den ASCII-Code in eine Zahl zwischen 0 für "A" und 25 für "Z" umzuwandeln. Dann kannst du deinen Schlüssel addieren und für den Rest die Modulo-Operation verwenden.

Beim Entschlüsseln hast du dieselben Probleme auf der anderen Seite des Alphabets. Hier darfst du nicht einfach von "A" noch etwas abziehen sondern musst wieder bei "Z" beginnen. Die Entschlüsselung ist aber dasselbe wie die Verschlüsselung mit dem Schlüssel 25-Key.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jesus
Gast





BeitragVerfasst am: 22. Jun 2005 21:31    Titel: Antworten mit Zitat

mit Pascal = Delphi sprach ich nicht vom Program sondern von der SPrache.

Problem : Delphi gibt es nur an den Schulrechnern und wir sollen dieses Program zu Hause entwickeln. Deswegen ist Trial & Error leider nicht möglich.

Edit-Felder:
Code:
edText
edKey
edEnkrypted
Buttons:
Code:
btEnkrypt
btDekrypt
Variablen:[code]a, b, c, e, f: integer
d: char[/char]a ist die länge vom eingegebenen Text
b ist der Schlüssel
c ist einfach nur eine integer-var
d speichert Buchstabe in lowercase ab
e speichert ASCii-Code vom Buchstaben ab
f speichert die neue Nummer für den Buchstaben ab[code]OnClick btEnkrypt
a := length(edTexT); // stimmt das so?
b := strtoint(edKey.text);
for c := 1 to a do
begin
d := lowercase(edText.text(b))
e := ord(d); // ist die Frage ob der dann an Stelle "c" den einen Buchstaben liest
f := e + b;
edEnkrypted.text := char(f); // wird das Programm dann nicht für jedes "c" den Text neu Speichern anstatt hinzufügen?
inc(c);
end;

OnClick btDekrypt
a := length(edEnkrypted);
b := strtoint(edKey.text);
for c := 1 to a do
begin
d := lowercase(edEnkrypted.text(b))
e := ord(d);
f := e - b;
edText.text := char(f);
inc(c);
end;[/code]

Die Zahlen von 0-25 als das Alphabet zu benutzen anstatt den Standard ASCii code ist doch viel zu umständlich, dann muss ich einmal dass hier machen:
e := ord(d) - 97; // weil a = 97
und dann später zu f wieder addieren damit auch der richtige Buchstabe rauskommt. Für die Rechnung bei f>'z' wäre das natürlich hilfreich, aber man könnte doch auch:[code]If f>122 then
f := 97 + (f - 122)[/code]
oder etwa nicht?

Hilfe wie immer willkommen!
Nach oben
Jesus



Anmeldungsdatum: 22.06.2005
Beiträge: 2
Wohnort: Neben Gott

BeitragVerfasst am: 22. Jun 2005 22:06    Titel: Antworten mit Zitat

Jetzt mal richtig:

Edit-Felder:
Code:
edText
edKey
edEnkrypted
Buttons:
Code:
btEnkrypt
btDekrypt
Variablen:
Code:
a, b, c, e, f: integer
d: char
a ist die länge vom eingegebenen Text
b ist der Schlüssel
c ist einfach nur eine integer-var
d speichert Buchstabe in lowercase ab
e speichert ASCii-Code vom Buchstaben ab
f speichert die neue Nummer für den Buchstaben ab
Code:
OnClick btEnkrypt
a := length(edTexT);            // stimmt das so?
b := strtoint(edKey.text);
for c := 1 to a do
begin
d := lowercase(edText.text(b))
e := ord(d);                    // ist die Frage ob der dann an Stelle "c" den einen Buchstaben liest
f := e + b;
edEnkrypted.text := char(f);    // wird das Programm dann nicht für jedes "c" den Text neu Speichern anstatt hinzufügen?
inc(c);
end;

OnClick btDekrypt
a := length(edEnkrypted);
b := strtoint(edKey.text);
for c := 1 to a do
begin
d := lowercase(edEnkrypted.text(b))
e := ord(d);
f := e - b;
edText.text := char(f);
inc(c);
end;


Die Zahlen von 0-25 als das Alphabet zu benutzen anstatt den Standard ASCii code ist doch viel zu umständlich, dann muss ich einmal dass hier machen:
e := ord(d) - 97; // weil a = 97
und dann später zu f wieder addieren damit auch der richtige Buchstabe rauskommt. Für die Rechnung bei f>'z' wäre das natürlich hilfreich, aber man könnte doch auch:
Code:
If f>122 then
f := 96 + (f - 122)
oder etwa nicht?
beim entschlüsseln dann:
Code:
If f<97 then
f := 123 - (97 - f)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
zoiX



Anmeldungsdatum: 28.06.2005
Beiträge: 8

BeitragVerfasst am: 29. Jun 2005 15:27    Titel: Antworten mit Zitat

Jesus: For-Schleifen solltest du dir dringend nochmal anschauen.

Das Increment in deinen Schleifen ist (zumindest bei meinem Delphi) nicht nötig. Dafür fehlt ein End - dann sähe der Code schonmal so aus (Variablen bennen ich mal um)

Variablen:
TextLen = a -> Textlänge
Key = b -> Schlüssel
n = c -> Integervariable
LowCase = d -> Zeichen in lowercase
PlainASCii = e -> ASCii-Code im Klartext
CodeASCii = f -> ASCii-Code "verschlüsselt"

Dazu kommen neu:
Code:

Plaintext: String;
Crypttext: String;

Die sollten selbsterklärend sein.

Code:

//Variablenwerte festlegen
Crypttext := ''
Plaintext := edText.text;
Key := strtoint(edKey.text);
TextLen := length(Plaintext);

//Verschlüsselung
For i := 1 to TextLen do begin
   LowCase := lowercase(Plaintext[i]);
   PlainASCii := ord(LowCase);
   CodeASCii := PlainASCii + Key;
   Crypttext := Crypttext + char(CodeASCii);
   End;

//Ausgabe
edEnkrypted.text := Crypttext;
End;


Die Entschlüsselung ist quasi das umgekehrte (man ändere das Vorzeichen von Key).
Probleme bisher:
-Wir "verlassen" unter Umständen das Alphabet
-Groß-/Kleinschreibung werden nicht unterschieden (Dafür müsste man allerdings einfach nur ein "lowercase" entfernen, solange man nicht beachtet, dass man u.U. das Alphabet verlässt)

Allerdings hab ich nu keine Zeit mehr, sonst würd ich mich noch dransetzen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jesus



Anmeldungsdatum: 22.06.2005
Beiträge: 2
Wohnort: Neben Gott

BeitragVerfasst am: 29. Jun 2005 20:25    Titel: Antworten mit Zitat

zoiX hat Folgendes geschrieben:
Jesus: For-Schleifen solltest du dir dringend nochmal anschauen.

Das Increment in deinen Schleifen ist (zumindest bei meinem Delphi) nicht nötig. Dafür fehlt ein End - dann sähe der Code schonmal so aus (Variablen bennen ich mal um)



das stimmt allerdings, wie geagt wir haben in letzter zeit viel mit assembler gearbeitet und plötzlich sollten wir wieder delphi und wenn man über 3 monate mit assembler programmiert gewöhnt man sich daran alles schritt für schritt zu machen, inc ist bei for-schleife logischer weise vorhanden, heißt ja for-to

leider ist der beitrag zu spät und ich habe meinen code schon eingereicht. ich habe den fast genau so abgegeben wie hier gepostet, nur dass ich meine idee für das beschränken des alphabets eingebracht habe. mein lehrer ist ein spaten, daher werde ich niemals eine verbesserung bekommen. immerhin habe ich in der letzten klausur (heute bekommen, was über assembler) 12 punkte bekommen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Delphi/Kylix Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen