Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Vigenere-Versclüsselung eleganter


Avalon - Mo 15.08.05 22:23
Titel: Vigenere-Versclüsselung eleganter
Hi. Ich hab eine Verschlüsselung nach Vigenere geproggt, die auch bestens funktioniert. ich hab aber das gefühl, da könnte man an einigen stellen noch was Schöner machen, also nicht so "plump" wie ich das gelöst bae. kann mir einer helfen? Ich weiß, das es das Thema schon etliche male gab, aber ich denke, es ist ne konkrete Frage, oder?


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:
const alphabet= 'abcdefghijklmnopqrstuvwxyzäöüß';  //Buchstaben im Alphabet werden definiert

procedure TForm1.Button1Click(Sender: TObject);
var intext, key, key2, outtext, buchstabe: string;
    versch, i, j: integer;
    buf: Char;
begin

intext:=LowerCase(edit1.text);
key:= edit2.text;
        // Key auf Länge des Schlüsselwortes bringen
        if length(intext) > length(key) then  //Schlüssellänge wird mit der Klartextlänge verglichen
        begin
        key2:='';    //Key wird geleert
        repeat
        key2:=key2+key;                   // key wird rekursiv aneinander gehängt
        until length(key2) > length(intext);           // bis er länger ist als der Klartext
        end;
 //Verschlüsselungsvorgang
 for i:= 1 to length(intext)+1 do  //vom ersten bis zum letzen Buchstaben des Klartext
 begin
        buf:= intext[i];                            // wird jeder einzeln in den Buffer geschrieben
        versch:= Ord(key2[i]) - 97;                 // die Differenz von Keybuchstabe zu a ermittelt
                for j:= 1 to versch do              // von 2 bis zur Differenz vird
                begin                                // ein a in ein z umgewandelt
                if buf= 'z' then buf:='a';
                if buf= ' ' then buf:=' '            // eine Leerstelle frei gelassen
                else
                inc(buf);                             //der Buchstabe jeweils um 1 verschoben
                end;
           outtext:= outtext + buf;                  //DEr Ausgabetext wird zusammen gesetzt
        
 end;
  // Ausgabe
 if outtext[length(outtext)] <> alphabet then begin outtext[length(outtext)]:=' ';  //Das letzte Zeichen wird gelöscht, wenn es nicht teil des Alphabets ist
 edit3.text:= outtext; end

 else edit3.text:= outtext;   //sonst wird der Text original wiedergegeben


end;


Danke im Vorraus, Avalon


Harry M. - Di 16.08.05 00:46

Dann kuck Dir das mal an: http://www.delphi-forum.de/viewtopic.php?t=30376&highlight=vigenere