Autor |
Beitrag |
DissA$teR!
      
Beiträge: 17
Win XP
Turbo Delphi 2006
|
Verfasst: Sa 17.11.07 15:04
Hallo.
Zuerst einmal Entschuldigung, falls dies das falsche Unterforum ist, aber ich wusste nicht wo ich es sonst hätte reinschreiben sollen.
Ich bin 12. Klasse an einem Gymnasium und wir behandeln gerade die Chiffrierung in Informatik. Zwar habe ich den Grundgedanken verstanden, habe jedoch keine Ahnung, wie ich dies mit Delphi (können wahlweise auch Turbo Pascal verwenden) umsetzen kann. Leider schreiben wir nächste Woche einen Test dazu und ich hoffe dass ihr mir vielleicht die Vorgehensweise mit Delphi erklären könnt. Zur Veranschaulichung des Problems möchte ich euch erst einmal ein Beispiel geben:
Chiffrierung mit einem Schlüssel
Bsp:
Schlüsselwort (W): Geheimschrift
Schlüsselbuchstabe (S): E
___ 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 (Klartextalphabet)
--> U X Y Z G E H I M S C R F T A B D J K L N O P Q U V (Geheimtextalphabet)
Man soll praktisch in dem fertigen Programm W, S und den Klartext eingeben und der Geheimtext soll ausgegeben werden. Mein Problem ist jedoch, dass ich noch nicht mal weiß, wie ich auf das Geheimtextalphabet komme. Könnt ihr mir das erklären?
Dankeschön schonmal im Voraus.
Mfg, DissA$teR! Moderiert von jasocul: Topic aus VCL (Visual Component Library) verschoben am Di 20.11.2007 um 08:31
|
|
IceBube
      
Beiträge: 231
|
Verfasst: Sa 17.11.07 16:19
Hallo!
Ich weiß nicht ob ich das jetzt richtig verstanden habe, jedoch habe ich mir mal erlaubt einen Code zu schreiben.
Sicher ein bissl umständlich...
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: 108:
| function ZahlToBuchstabe(Zahl:integer):string; begin Result := ''; if Zahl = 1 then Result := 'a'; if Zahl = 2 then Result := 'b'; if Zahl = 3 then Result := 'c'; if Zahl = 4 then Result := 'd'; if Zahl = 5 then Result := 'e'; if Zahl = 6 then Result := 'f'; if Zahl = 7 then Result := 'g'; if Zahl = 8 then Result := 'h'; if Zahl = 9 then Result := 'i'; if Zahl = 10 then Result := 'j'; if Zahl = 11 then Result := 'k'; if Zahl = 12 then Result := 'l'; if Zahl = 13 then Result := 'm'; if Zahl = 14 then Result := 'n'; if Zahl = 15 then Result := 'o'; if Zahl = 16 then Result := 'p'; if Zahl = 17 then Result := 'q'; if Zahl = 18 then Result := 'r'; if Zahl = 19 then Result := 's'; if Zahl = 20 then Result := 't'; if Zahl = 21 then Result := 'u'; if Zahl = 22 then Result := 'v'; if Zahl = 23 then Result := 'w'; if Zahl = 24 then Result := 'x'; if Zahl = 25 then Result := 'y'; if Zahl = 26 then Result := 'z';
if Result = '' then Result := 'a'; exit; end;
function BuchstabeToZahl(Buchstabe:char):integer; begin Result := -1; if LowerCase(Buchstabe)='a' then Result := 1; if LowerCase(Buchstabe)='b' then Result := 2; if LowerCase(Buchstabe)='c' then Result := 3; if LowerCase(Buchstabe)='d' then Result := 4; if LowerCase(Buchstabe)='e' then Result := 5; if LowerCase(Buchstabe)='f' then Result := 6; if LowerCase(Buchstabe)='g' then Result := 7; if LowerCase(Buchstabe)='h' then Result := 8; if LowerCase(Buchstabe)='i' then Result := 9; if LowerCase(Buchstabe)='j' then Result := 10; if LowerCase(Buchstabe)='k' then Result := 11; if LowerCase(Buchstabe)='l' then Result := 12; if LowerCase(Buchstabe)='m' then Result := 13; if LowerCase(Buchstabe)='n' then Result := 14; if LowerCase(Buchstabe)='o' then Result := 15; if LowerCase(Buchstabe)='p' then Result := 16; if LowerCase(Buchstabe)='q' then Result := 17; if LowerCase(Buchstabe)='r' then Result := 18; if LowerCase(Buchstabe)='s' then Result := 19; if LowerCase(Buchstabe)='t' then Result := 20; if LowerCase(Buchstabe)='u' then Result := 21; if LowerCase(Buchstabe)='v' then Result := 22; if LowerCase(Buchstabe)='w' then Result := 23; if LowerCase(Buchstabe)='x' then Result := 24; if LowerCase(Buchstabe)='y' then Result := 25; if LowerCase(Buchstabe)='z' then Result := 26; end;
function ChiffreWord(Word:string;Key:integer):string; var i : integer; Zahl,cZahl : integer; begin Result := '';
for i := 1 to Length(Word) do begin Application.ProcessMessages;
Zahl := BuchstabeToZahl(Word[i]); if Zahl <> -1 then begin
cZahl := Key-Zahl; if cZahl < 1 then cZahl := 26-(cZahl * (-1)); if Word[i] = LowerCase(Word[i]) then begin Result := Result + ZahlToBuchstabe(cZahl); end else begin Result := Result + Uppercase(ZahlToBuchstabe(cZahl)); end; end else begin Result := Result + Word[i]; end; end;
exit; end;
procedure TForm1.Button1Click(Sender: TObject); begin Edit2.Text := ChiffreWord(Edit1.Text,23); end; |
P.s.: Habs jedoch nicht mit einer Zahl von 1-26 gemacht...
PP.s.: Sicher ists leider nicht.... :/
lg
|
|
ub60
      
Beiträge: 764
Erhaltene Danke: 127
|
Verfasst: Sa 17.11.07 19:57
Also, als erstes, der erste Buchstabe im Geheimtextalphabet sollte ein W sein.
Dann noch ein kleiner Schnipsel, der etwas kürzer und leichter zu ändern sein sollte:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| Klartextalphabet:='ABCDEFGHIJKLMNOPQRSTUVWXYZ'; Geheimtextalphabet:='WXYZGEHIMSCRFTABDJKLNOPQUV'; Geheimtext:=''; for i:=1 to Length(KlarText) do begin Position:=Pos(Klartext[i],KlartextAlphabet); Buchstabe:=GeheimtextAlphabet[Position]; Geheimtext:=Geheimtext+Buchstabe; end; |
ub60
|
|
gispos
      
Beiträge: 94
WIN 7
XE10, D2007
|
Verfasst: So 18.11.07 22:02
Also wenn ich es richtig verstanden habe, dann geht es um eine Verschlüsselung eines String?
Dies macht z.B. die untere Function. aText ist der String der verschlüsselt werden
soll, Schluessel ist eben der Schlüssel mit dem Verschlüsselt wird (das Passwort).
Rückgabe ist der verschlüsselte String. Zum endschlüsseln, wird das Result als aText
mit gleichem Schlüssel wieder übergeben.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function XORString(const aText, Schluessel: String): String; var i,q: integer; sc: String; begin q:= 1; if Trim(Schluessel)= '' then sc:= 'xyqwejwughb' else sc:= Schluessel; Result:= aText; If Result<> '' then for i:= 1 to Length(Result) do begin Result[i]:= Chr(Ord(aText[i]) XOR Ord(sc[q])); inc(q); if q> length(sc) then q:= 1; end; end; |
Als Nachtrag ein kleines Beispiel.
Gruß gispos
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von gispos am Mo 19.11.07 01:42, insgesamt 2-mal bearbeitet
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 18.11.07 23:24
|
|
DissA$teR! 
      
Beiträge: 17
Win XP
Turbo Delphi 2006
|
Verfasst: Mo 19.11.07 18:20
Dankeschön für eure schnellen und konstruktiven antworten. Ich werde es gleich heute abend mal ausprobieren und falls ich dann noch fragen haben sollte, werde ich sie morgen stellen.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mo 19.11.07 18:46
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
ub60
      
Beiträge: 764
Erhaltene Danke: 127
|
Verfasst: Mo 19.11.07 21:12
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mo 19.11.07 21:22
klar steht er in der exe (irgendwie). Aber z.B. so
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Str:=''; Str:=Str+'H'; Str:=Str+'e'; Str:=Str+'l'; Str:=Str+'l'; Str:=Str+'o'; Str:=Str+' '; Str:=Str+'W'; Str:=Str+'o'; Str:=Str+'r'; Str:=Str+'l'; Str:=Str+'d'; |
nicht im Klartext
grundsätzlich finde ich auch die Verschlüsselungen, wo ein Buchstabe immer genau einem andren zugeordnet wird, nicht so toll (vor allem im Zeitalter des Computers). z.B. könnte man nicht den andren Buchstaben nehmen, sondern erst noch die Position im Wort dazuzählen.
Bsp:
Schlüssel=WHEODRL
Hello=>EDEOH (die beiden l's werden zu verschiedenen Buchstaben)
//PS: das hat aber irgendwie nichts mehr mit dem Topic zu tun 
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 20.11.07 09:19
DissA$teR! hat folgendes geschrieben: | Chiffrierung mit einem Schlüssel
Bsp:
Schlüsselwort (W): Geheimschrift
Schlüsselbuchstabe (S): E
___ 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 (Klartextalphabet)
--> U X Y Z G E H I M S C R F T A B D J K L N O P Q U V (Geheimtextalphabet)
Man soll praktisch in dem fertigen Programm W, S und den Klartext eingeben und der Geheimtext soll ausgegeben werden. Mein Problem ist jedoch, dass ich noch nicht mal weiß, wie ich auf das Geheimtextalphabet komme. Könnt ihr mir das erklären? |
Was passiert ist ja, dass alle doppelten Buchstaben aus dem Schlüsselwort entfernt werden.
Geheimschrift --> Gehimscrft
Nun wird das Resultat den Buchstaben ab dem Schlüsselbuchstaben zugeordnet:
E --> G, F --> E, G --> H, usw.
Der Rest wird dann nach dem Alphabet zugerodnet, wobei bereits verwendete Buchstaben ignoriert werden.
Im Anhang befindet sich ein Beispielprogramm, das ich bei mir liegen hatte.
Einloggen, um Attachments anzusehen!
|
|
|