Autor Beitrag
t0pf
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 08.09.05 14:08 
Hallo, zwar folgendes, 11. Klasse , Java angefangen, 12.Klasse Delphi Terror LK auf ner anderen Schule und da tu ich mich ein wenig schwer. Kenn das Programm 2h und soll ein Vigenere Verschlüsselungs/Entschlüsselungsprogramm schreiben. Vorher gabs natürlich reichlich Theorie, die ehrlicherweise sehr hilfreich wahr.

Naja, einen Anfang hab ich : Vigenere Quadrat aufgebaut,(leider kann ichs nicht überprüfen, aber ich denke, dass ist richtig), Zeilenbereinigung und dann halt versch. procedures für das Ver/Entschlüsseln, die ich grade erstelle und wo ich nicht weiterkomme, weil ich mit der Syntax nicht vertraut bin.

Hmm, wie kann ich halt technisch das "Klartextwort" mit dem Schlüsselwort vergleichen und so das Kryptogramm erstellen.

Ich hab keine Ahnung.
jaevencooler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 166
Erhaltene Danke: 6

MS-DOS,Win32, Win95, Win 98, Me,XP, Linux, NT4.0, NT 2000-2008, Vista, Windows 7
Turbo Pascal,D1 Enter,D2 Enter,D3 Enter,D5 Enter, Kylix, D2007, PL/SQL, MS/SQL, Delphi 2010, Delphi XE
BeitragVerfasst: Do 08.09.05 14:20 
Moin, Moin,

willkomen :welcome: im Forum t0pf.

damit wir Dir weiter helfen können, benötigen wir zunächst erstmal ein paar mehr Informationen. Bei solch schon recht komplexen Aufgaben sind Code Schnipsel immer sehr hilfreich. Auch die Information welche Delphi Version Du benutzt ist immer sehr hilfreich.

Beste Grüße
Michael

_________________
Wissen ist Macht, nichts wissen macht auch nichts...
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 08.09.05 14:28 
Hi und :welcome:

generell kann ich dir zum Einstieg in Delphi diesen Crashkurs empfehlen. Da du ja schreibst, dass dir die Theorie klar ist, aber du mit der Syntax Probleme hast sollte dir dieser Crashkurs sicher weiterhelfen können!

Gruß, Motzi

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
t0pf Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 08.09.05 16:50 
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:
unit uHaupt;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    klartextzeile: TEdit;
    kryptogrammtextzeile: TEdit;
    schluesselwort: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    BtChiff: TButton;
    BtDechiff: TButton;
    procedure BtChiffClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function bereinigte_Zeile(Zeichenkette : string) : string;
var hilfe: string;
var i: byte;
begin
     for i:=1 to length(Zeichenkette) do
     begin
         case Zeichenkette[i] of
         'ß' : hilfe := hilfe + 'SS';
         'Ö''ö' : hilfe := hilfe + 'OE';
         'Ä''ä' : hilfe := hilfe + 'AE';
         'Ü''ü' : hilfe := hilfe + 'UE';
         ' '      : hilfe := hilfe + ' ';
         'A'..'Z''a'..'z' : hilfe := hilfe + upcase(Zeichenkette[i]);
         end;
     end;
end;

function VigenereQuadratChiff(klartextzeile, schluesselwort:string):string;
 var VigenereQuadrat : array[1..261..26of char;
 var hilfe : string;
 var i, asci, s, z, stelle, x : byte;
begin
{ VIGENERE QUADRAT INITIALISIERUNG }
     i:= 0;
     asci:= 65;
     for z:=1 to 26 do
     begin
          for s:=1  to 26 do
          begin
               VigenereQuadrat[z,s] := chr(asci+i);
               i := i + 1;
               if asci >=90 then
               begin
                    asci:=65;
                    i:=0;
               end;     
          end;
          asci := asci +1;
     end;
{ VIGENERE QUADRAT INITIALISIERUNG ENDE}
  hilfe := '';
     for x :=1 to length(klartextzeile) do
         begin
         hilfe := hilfe + VigenereQuadrat[ord(schluesselwort[stelle])-64,ord(klartextzeile[x])-64];
         inc(stelle);
         if stelle > length(schluesselwort) then stelle :=1;
         end;
     result := hilfe;    
end;


procedure TForm1.BtChiffClick(Sender: TObject);
begin
     klartextzeile.Text := bereinigte_Zeile(klartextzeile.Text);
     if length(schluesselwort.Text) >0 then
     begin
          schluesselwort.Text := bereinigte_Zeile(schluesselwort.Text);
          kryptogrammtextzeile.Text:= VigenereQuadratChiff(klartextzeile.Text, schluesselwort.Text);
     end;

     end;

end.



Das ist mein bisheriger Code. Aber wie gesagt.
Danke für den Crashkurs Link, vllt ist es dadurch leichter.
Spaceguide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Fr 09.09.05 12:02 
Hier ein Quick Hack:

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:
const FIRST_CHAR = Ord('A');
      CHAR_COUNT = Ord('Z')-Ord('A')+1;


function RotateChar(aChar : char; aDistance : integer) : char;
 var index : integer;
begin
 index := Ord(Upcase(aChar))-FIRST_CHAR;
 Result := Chr((index + aDistance + CHAR_COUNT*16mod CHAR_COUNT+FIRST_CHAR);
end;

function GetVignereChar(const aText,aKey : string; aIndex,aDirection : integer) : char;
begin
 Result := RotateChar(
  aText[aIndex],
  (Ord(Upcase(aKey[(aIndex-1mod Length(aKey)+1]))-FIRST_CHAR)*aDirection);
end;

function Vignere(const aText,aKey : string; aDirection : integer) : string;
//aDirection: 1 = encrypt, -1 = decrypt
 var i : integer;
begin
 SetLength(Result,Length(aText));

 if Length(aKey)>0 then
 begin
  for i := 1 to Length(aText) do
   Result[i] := GetVignereChar(aText,aKey,i,aDirection);
 end else
  Result := aText;
end;
t0pf Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 11.09.05 14:07 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
 var VigenereQuadrat : array[1..261..26of char;
 var hilfe : string;
 var i, asci, s, z, stelle, x : byte;
{ VIGENERE QUADRAT INITIALISIERUNG }
     i:= 0;
     asci:= 65;
     for z:=1 to 26 do
     begin
          for s:=1  to 26 do
          begin
               VigenereQuadrat[z,s] := chr(asci+i);
               i := i + 1;
               if asci >=90 then
               begin
                    asci:=65;
                    i:=0;
               end;     
          end;
          asci := asci +1;
     end;
{ VIGENERE QUADRAT INITIALISIERUNG ENDE}



Ist das überhaupt richtig zugewiesen?
Tut mir leid, dass ich soviel Frage, aber ich bin echt unter Zeitdruck mit dem Kram.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: So 11.09.05 14:23 
den einzigen fehelr den ich sehe ist das du stelle nie initialisierst (auf 1 setzt)
an dem code den du zuletzt gepostet hast ist kein programmierfehelr (der zum übrelauf führen kann) aber hab net geschaut ob es das richtige macht

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
t0pf Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 11.09.05 19:19 
Ok, hab das verschlüsseln hinbekommen.

Wie entschlüssel ich dass?
ICh bin so logik gestört :(

ausblenden 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:
function VigenereQuadratDechiff(kryptogrammtextzeile, schluesselwort:string):string;
 var VigenereQuadrat : array[1..261..26of char;
 var hilfe: string;
 var asci, s, z, stelle, x, i : byte;
begin
{ VIGENERE QUADRAT INITIALISIERUNG }
     for z:=1 to 26 do
     begin
          for s:=1  to 26 do
          begin
               asci := z+s+63;
               if asci >=91 then asci := asci -26;
               VigenereQuadrat[z,s] := chr(asci);
          end;
     end;
{ VIGENERE QUADRAT INITIALISIERUNG ENDE}
  hilfe := '';
  stelle:= 1;
     for x :=1 to length(kryptogrammtextzeile) do
         begin
         hilfe := hilfe + VigenereQuadrat[ { WAS MUSS HIER REIN ? WELCHE RECHNUNG ? WAS AUCH IMMER}];
         inc(stelle);
         if stelle > length(schluesselwort) then stelle :=1;
         end;
     result := hilfe;
end;
Spaceguide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Mo 12.09.05 12:26 
Ja guck dir doch mal meinen Codefetzen an, damit kannst du wunderbar ver- und entschlüsseln.
t0pf Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 18.09.05 14:13 
Okeh, ich hab jetzt was nur manchmal kommen bei langen Chiffrezeilen komische Klartextzeilen raus.

Hier mein Dechiff Vorgang:
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:
function VigenereQuadratDechiff(kryptogrammtextzeile, schluesselwort:string):string;
 var VigenereQuadrat : array[1..261..26of char;
 var hilfe: string;
 var buchstabe, line, Spalte, j, zeile, i: byte;
begin
{ VIGENERE QUADRAT INITIALISIERUNG }
     for line:=1 to 26 do
     begin
          Spalte:= 1;
          for buchstabe:= line  to 26 do
          begin
           VigenereQuadrat[line, Spalte] := chr(buchstabe+64);
           inc(Spalte);
          end;
          for buchstabe:= 1 to line-1 do
          begin
               VigenereQuadrat[line, Spalte] := chr(buchstabe+64);
               inc(Spalte);
          end;
     end;
{ VIGENERE QUADRAT INITIALISIERUNG ENDE}
  hilfe := '';
  j:= 1;
  zeile := 1;
  for i:=1 to length(kryptogrammtextzeile) do
  begin
    while kryptogrammtextzeile[i] <> VigenereQuadrat[zeile, ord(schluesselwort[j])-64]
    do inc(zeile);
         hilfe := hilfe + VigenereQuadrat[zeile, 1];
         inc(j);
         if j > length(schluesselwort) then j :=1;
  end;
  result := hilfe; 
end;


Kann sich das mal jemand fix angucken und mir sagen, ob da ein Fehler vorhanden ist?
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Fr 25.11.05 23:02 
hier nochmal vereinfacht und veranschaulicht:

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:
function Vignere(Text, Key: string): string;
const
  vignere_quad: array [1..26of string =
(
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'BCDEFGHIJKLMNOPQRSTUVWXYZA',
'CDEFGHIJKLMNOPQRSTUVWXYZAB',
'DEFGHIJKLMNOPQRSTUVWXYZABC',
'EFGHIJKLMNOPQRSTUVWXYZABCD',
'FGHIJKLMNOPQRSTUVWXYZABCDE',
'GHIJKLMNOPQRSTUVWXYZABCDEF',
'HIJKLMNOPQRSTUVWXYZABCDEFG',
'IJKLMNOPQRSTUVWXYZABCDEFGH',
'JKLMNOPQRSTUVWXYZABCDEFGHI',
'KLMNOPQRSTUVWXYZABCDEFGHIJ',
'LMNOPQRSTUVWXYZABCDEFGHIJK',
'MNOPQRSTUVWXYZABCDEFGHIJKL',
'NOPQRSTUVWXYZABCDEFGHIJKLM',
'OPQRSTUVWXYZABCDEFGHIJKLMN',
'PQRSTUVWXYZABCDEFGHIJKLMNO',
'QRSTUVWXYZABCDEFGHIJKLMNOP',
'RSTUVWXYZABCDEFGHIJKLMNOPQ',
'STUVWXYZABCDEFGHIJKLMNOPQR',
'TUVWXYZABCDEFGHIJKLMNOPQRS',
'UVWXYZABCDEFGHIJKLMNOPQRST',
'VWXYZABCDEFGHIJKLMNOPQRSTU',
'WXYZABCDEFGHIJKLMNOPQRSTUV',
'XYZABCDEFGHIJKLMNOPQRSTUVW',
'YZABCDEFGHIJKLMNOPQRSTUVWX',
'ZABCDEFGHIJKLMNOPQRSTUVWXY'
);
var
  i, j, count: integer;
  ukey: string;
  chx, chy: char;
begin
  result := '';
  count := 0;
  ukey := key;
  if length(key) < length(Text) then
    for i := 1 to length(Text) do
    begin
      inc(count);
      if count > length(key) then
        count := 1;
      ukey := ukey + key[count];
    end;
  if length(key) > length(Text) then
    ukey := copy(key, 1, length(Text));
  for j := 1 to length(Text) do
  begin
    chx := upcase(Text[j]);
    chy := upcase(ukey[j]);
    result := result + vignere_quad[ord(chx) - 64][ord(chy) - 64];  //die eigentliche verschlüsselung
  end;
end;

stimmt, so kann man das quad auch machen ;)