Autor |
Beitrag |
t0pf
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
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
|
Verfasst: Do 08.09.05 14:20
Moin, Moin,
willkomen  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
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Do 08.09.05 14:28
Hi und
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 
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 08.09.05 16:50
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 public 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..26, 1..26] of char; var hilfe : string; var i, asci, s, z, stelle, x : byte; begin
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;
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
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Fr 09.09.05 12:02
Hier ein Quick Hack:
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*16) mod CHAR_COUNT+FIRST_CHAR); end;
function GetVignereChar(const aText,aKey : string; aIndex,aDirection : integer) : char; begin Result := RotateChar( aText[aIndex], (Ord(Upcase(aKey[(aIndex-1) mod Length(aKey)+1]))-FIRST_CHAR)*aDirection); end;
function Vignere(const aText,aKey : string; aDirection : integer) : string; 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 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 11.09.05 14:07
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..26, 1..26] of char; var hilfe : string; var i, asci, s, z, stelle, x : byte;
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; |
Ist das überhaupt richtig zugewiesen?
Tut mir leid, dass ich soviel Frage, aber ich bin echt unter Zeitdruck mit dem Kram.
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: 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 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 11.09.05 19:19
Ok, hab das verschlüsseln hinbekommen.
Wie entschlüssel ich dass?
ICh bin so logik gestört
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..26, 1..26] of char; var hilfe: string; var asci, s, z, stelle, x, i : byte; begin
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;
hilfe := ''; stelle:= 1; for x :=1 to length(kryptogrammtextzeile) do begin hilfe := hilfe + VigenereQuadrat[ ]; inc(stelle); if stelle > length(schluesselwort) then stelle :=1; end; result := hilfe; end; |
|
|
Spaceguide
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Mo 12.09.05 12:26
Ja guck dir doch mal meinen Codefetzen an, damit kannst du wunderbar ver- und entschlüsseln.
|
|
t0pf 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 18.09.05 14:13
Okeh, ich hab jetzt was nur manchmal kommen bei langen Chiffrezeilen komische Klartextzeilen raus.
Hier mein Dechiff Vorgang:
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..26, 1..26] of char; var hilfe: string; var buchstabe, line, Spalte, j, zeile, i: byte; begin
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;
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
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Fr 25.11.05 23:02
hier nochmal vereinfacht und veranschaulicht:
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..26] of 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]; end; end; |
stimmt, so kann man das quad auch machen 
|
|
|