Autor Beitrag
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Sa 23.10.04 16:16 
hi leute.

Ich hab einen Verwürfelungsalgo geschrieben, der sieht SO aus:
ausblenden 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; //Diese Funktion liefert den Schlüssel "s" Buchstabe für Buchstabe
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 482

Win XP | Suse 10.1
Delphi 2005 Pers.
BeitragVerfasst: 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.

_________________
Linux und OpenSource rulez!
JayEff Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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.

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:
27:
28:
29:
30:
procedure TForm4.Button1Click(Sender: TObject);
var
  i,x:integer;
begin
memo2.Text:=''//zur sicherheit, wenn das prog 2 mal ausgeführt wird
for i:=1 to 26 do az[i]:=''//az leeren (ist ein array, der für jeden buchstaben (a bis z) ein elment hat)
keyint:=0//nötig für keychar(schlüssel);
for i:=1 to length(Memo1.Text) do
begin
x:=ord(keychar(Edit1.Text))-96;   //der schlüssel soll nur aus kleinbuchstaben bestehen, desshalb diese zahl. dadurch wird a=1, b=2 und so weiter
az[x]:=az[x]+Memo1.Text[i];  //fügen wir den klaartextbuchstaben dem dem schlüsselbuchstaben entsprechenden element in az zu
end;
for i:=1 to 26 do Memo2.Text:=Memo2.Text+az[i]+char(byte(13))+char(byte(10)); //das ausgabefeld bekommt jedes element von az in alphabethischer reihenfolge dazu; danach eine entertaste(wusste nicht wie ich das sonst hinbekomm... achja.. lines.add -.-
end;

procedure TForm4.Button2Click(Sender: TObject);
var
  i,x,y:integer;
begin
for i:=1 to 26 do az[i]:='';  //az wieder leeren
keyint:=0;                    // s.o.
memo1.text:='';               // s.o.
for i:=1 to 26 do az[i]:=memo2.Lines[i-1]; //az füllen
for i:=0 to 25 do y:=y+length(Memo2.Lines[i]); //alle zeichen von memo2 adieren, ohne leerzeilen (#13 #10 sind 2 zeichen -.-)
for i:=0 to y do
begin
  x:=ord(keychar(Edit1.Text))-96//s.o.
  if az[i]<>'' then Memo1.Text:=Memo1.Text+az[x][1]; //erster buchstabe von az[i] zum ausgabefeld hinzufügen
  az[i] := AnsiRightStr(az[i], length(az[i]) - 1);   //ersten buchstaben von az[i] löschen
end;

vielleciht ists jetzt ersichtilcher?
bitte helft mir o.O ichnixblick :(

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
sourcehunter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 482

Win XP | Suse 10.1
Delphi 2005 Pers.
BeitragVerfasst: 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.

_________________
Linux und OpenSource rulez!
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 24.10.04 13:52 
ahhhh augenkrebs!

verschachtel erstmal deine funktionen richtig sonst guckt sich das eh keiner an :>
JayEff Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 482

Win XP | Suse 10.1
Delphi 2005 Pers.
BeitragVerfasst: 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.

_________________
Linux und OpenSource rulez!
JayEff Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 28.10.04 15:23 
verwürfelung:
ausblenden 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:
ausblenden 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 :)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.