Autor Beitrag
DissA$teR!
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win XP
Turbo Delphi 2006
BeitragVerfasst: 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 user profile iconjasocul: Topic aus VCL (Visual Component Library) verschoben am Di 20.11.2007 um 08:31
IceBube
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: 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...

ausblenden volle Höhe Delphi-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:
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
//Buchstaben verwechseln
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
//KEY = 1-26
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94

WIN 7
XE10, D2007
BeitragVerfasst: 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.
ausblenden 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' // wenn kein Schlüssel übergeben wird, wird default gesetzt.
  else sc:= Schluessel;
  Result:= aText;
  // Hier wird verschlüsselt
  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



BeitragVerfasst: So 18.11.07 23:24 
DissA$teR! Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win XP
Turbo Delphi 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Mo 19.11.07 18:46 
user profile iconub60 hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
Klartextalphabet:='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Geheimtextalphabet:='WXYZGEHIMSCRFTABDJKLNOPQUV';



dabei sollte man bedenken, dass so der Schlüssel im Klartext in der exe steht :wink:

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: Mo 19.11.07 21:12 
user profile iconXion hat folgendes geschrieben:
user profile iconub60 hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
Klartextalphabet:='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Geheimtextalphabet:='WXYZGEHIMSCRFTABDJKLNOPQUV';



dabei sollte man bedenken, dass so der Schlüssel im Klartext in der exe steht :wink:

@Xion:
Wir reden von monoalphabetischer Substitution! Nicht von Fort Knox. :D :lol: :D
Aber wenn Du schon dabei bist: Gib doch mal einen Weg an, wie Du einen Schlüssel angibst, der nicht in der EXE steht.

ub60
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Mo 19.11.07 21:22 
klar steht er in der exe (irgendwie). Aber z.B. so

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 20.11.07 09:19 
user profile iconDissA$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!