Entwickler-Ecke
Sonstiges (Delphi) - Rückwärtsgang für meine Verwürfelung
JayEff - Sa 23.10.04 16:16
Titel: Rückwärtsgang für meine Verwürfelung
hi leute.
Ich hab einen Verwürfelungsalgo geschrieben, der sieht SO aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| function keychar(s:string) : char; begin Inc(keyint); KeyChar:=s[keyint]; If Keyint=Length(s) then Keyint:=0; end; procedure TForm4.Button1Click(Sender: TObject); var i,x:integer; begin memo2.Text:=''; for i:=1 to 26 do az[i]:=''; keyint:=0; for i:=1 to length(Memo1.Text) do begin x:=ord(keychar(Edit1.Text))-96; az[x]:=az[x]+Memo1.Text[i]; end; for i:=1 to 26 do Memo2.Text:=Memo2.Text+az[i]+char(byte(13))+char(byte(10)); end; |
Ich ordne also jeden Klartext buchstaben in ein teil des a bis z - arrays.
Mein rückwärtsgang ist dieser:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm4.Button2Click(Sender: TObject); var i,x,y:integer; begin for i:=1 to 26 do az[i]:=''; keyint:=0; memo1.text:=''; for i:=1 to 26 do az[i]:=memo2.Lines[i-1]; for i:=0 to 25 do y:=y+length(Memo2.Lines[i]); for i:=0 to y do begin x:=ord(keychar(Edit1.Text))-96; if az[i]<>'' then Memo1.Text:=Memo1.Text+az[x][1]; az[i] := AnsiRightStr(az[i], length(az[i]) - 1); end;
end; |
Aber das klappt nicht. -.-
irgentwo muss wohl ein fehler sein, oder ich packe das problem falsch an... naja vielleciht könnt ihr mir ja helfen. Hier ein verschlüsselter text:
Zitat: |
treu.do.
ekhehsr
Ai üengedb.
stes xsi ehsbm.s t kefeerr.rgilbaam eelsmi
e ggrzw
ieod l c.
l etlesnijhr caeegp
migs
dnncnvfe s
ntwcfresetu
hent iai uetui
n i
t ctssdi sinba siems
oghhchtlcnnwüt i eel
ui iuish iine nt iap
alhtareuadhvs
r i
cel a
res
do
|
beim zurück verschlüsseln wird daraus:
Zitat: |
Alsolotlhtruit unt etnn |
und danach eine schöne zugriffsverletzung.
aber es sollte so aussehen:
Zitat: |
Also gut hier ist ein text den du wahrscheinlich nicht entschlüsset bekommst. dashier ist eigentlich ja keine chiffrierung sondern eine verwürfelung. aber egal. ich glaube dass das trotzdem ein gutes beispiel ist. wie acuh immer. viel spass. |
Danke für eure Hilfe!
sourcehunter - Sa 23.10.04 21:20
Warscheinlich reicht es schon in TForm1.Button2Click y mit 0 zu initialisieren. Ansonst wäre es sehr hilfreich, wenn du die funktionsweise deines Algorithmusses erläutern würdest.
JayEff - Sa 23.10.04 21:36
da y ein integer ist, wird sie von delphi automatisch mit 0 initialisiert. ausser String und Integer werden alle anderen Variablen zufallsgeneriert, aber diese beiden sind '' und 0. ich werden den Code mal kommentieren und neu posten.
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:
| procedure TForm4.Button1Click(Sender: TObject); var i,x:integer; begin memo2.Text:=''; for i:=1 to 26 do az[i]:=''; keyint:=0; for i:=1 to length(Memo1.Text) do begin x:=ord(keychar(Edit1.Text))-96; az[x]:=az[x]+Memo1.Text[i]; end; for i:=1 to 26 do Memo2.Text:=Memo2.Text+az[i]+char(byte(13))+char(byte(10)); end;
procedure TForm4.Button2Click(Sender: TObject); var i,x,y:integer; begin for i:=1 to 26 do az[i]:=''; keyint:=0; memo1.text:=''; for i:=1 to 26 do az[i]:=memo2.Lines[i-1]; for i:=0 to 25 do y:=y+length(Memo2.Lines[i]); for i:=0 to y do begin x:=ord(keychar(Edit1.Text))-96; if az[i]<>'' then Memo1.Text:=Memo1.Text+az[x][1]; az[i] := AnsiRightStr(az[i], length(az[i]) - 1); end; |
vielleciht ists jetzt ersichtilcher?
bitte helft mir o.O ichnixblick :(
sourcehunter - So 24.10.04 13:16
Ich glaube der Fehler liegt in Zeile 25, aber ich kann dir nicht sagen, wie es richtig aussehen muss. Das char(byte(13)) kannst du durch #13 ersetzen und das andere durch #10.
uall@ogc - So 24.10.04 13:52
ahhhh augenkrebs!
verschachtel erstmal deine funktionen richtig sonst guckt sich das eh keiner an :>
JayEff - Mi 27.10.04 22:58
öhm.. das dachte ich mir, mit dem #13 #10 aber ich war mir ned sicher drum wollt ichs ned drauf ankommen lassen -.-
was meinst du mit der fehler ist da? warum? wo ist da ein fehler? in der for-schleife? um was handelt es sich?
--- danke dass es sich trotzdem einer angeguckt hat :)
sourcehunter - Do 28.10.04 11:45
Das ist ja das Problem ich weiß es eben auch nicht richtig. Das liegt aber größtenteils an deiner Form und auch daran, dass ich noch keine Zeit hatte mir das genauer anzugucken. Deshalb habe ich ja gefragt, wie der Algorithmus funktionieren sollte. Am Besten wäre es, wenn du auch ein kürzeres Beispiel in Einzelschritten posten könntest. Mal sehen vielleicht kann ich am Wochenende mal etwas genauer hingucken.
JayEff - Do 28.10.04 15:23
verwürfelung:
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:
| hallohallohallohalloh dies ist der klartext =>jedem schlüsselbuchstaben(hallo) werden klartextbuchstaben zugeordnet. =>h:dieat a:isrr l:est kte o: dlx =>schlüssel wird in alphabethiscer reihenfolge geordnet: a:isrr h:dieat l:est kte o: dlx =>verwürfelter text: jeder nicht benutzte buchstabe im schlüssel erhält eine leere zeile: a:isrr b: c: d: ... h:dieat i: ... l:est kte m: n: o: dlx p: q: ... y: z: |
Die buchstaben der zeilen sind nur zur übersicht. z.B. "a:isrr" leutet "issr"
Umgekehrt:
Quelltext
1: 2:
| =>Jedem Buchstaben des eingegebenen schlüssels eine textzeile zuordnen. =>text (ohne leerzeilen) von 0 bis ende durchgehen und den text wieder zusammensetzen. |
Ich hoffe das konnte dir helfen :) danke für den Versuch auf jedenfall :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!