Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Verschlüsselung


pbczero - Sa 28.05.05 14:29
Titel: Verschlüsselung
Hallo, ich möchte gerne mit hilfe eines schlüsselwortes ein alphabet erstellen, damit man dann nachher die buchstaben des normalen alphabets mit dem entsprechenden des generierten vertauschen kann.
leider klappt es noch nicht so richtig.ich wollte das alphabet erstmal in eine listbox schreiben, um es zu überprüfen.
es soll z.b. bei dem wort "ern" das alphabet
e r n a b c d f....usw. entstehen, d.h. nach dem verschlüsselungswort soll das alphabet drangehängt werden, die schon verwendeten buchstaben jedoch ausgelassen.
folgendes habe ich versucht:

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:
For a:=1 to length(edit1.text) do

    begin
    Code[a]:=edit1.text[a];
    end;


z:=false;
f:=length(edit1.text)+1;
    For c:=ORD('a'to ORD('z'do
      begin
       For b:=1 to length(Code) do
          begin
          If c=ORD(Code[b])
          then
          z:=true;
          end;

        If z=false then
        begin
        Code[f]:=CHR(c);
        f:=f+1;
        end;
        end;


For k:=1 to 26 do
listbox1.items.add(Code[k]);
end;


kann mir jemand einen tipp geben, wo der fehler liegt???


AXMD - Sa 28.05.05 14:51

Kannst du mir einen Tipp geben, wozu das gut sein soll? Bei 3 Buchstaben hast du fast 800% Redundanz - und das zu entschlüsseln dürfte wohl in nichtmal 10 Sekunden möglich sein. Stürz dich lieber auf Caesar oder Viginère - die sind um einiges sicherer und effeizienter als dein "Algorithmus"

AXMD


pbczero - Sa 28.05.05 15:01

ja ich kann dir nen tipp geben....ist auch einer der leicht zu verstehen ist ;-)

Ich fände auch eine andere Methode besser

ABER

der lehrer sitzt nunmal am längeren Hebel...und wenn er es so haben will...tja was soll ich sagen, dann muss ichs halt so machen...und ich weiß auch, dass ich ein noob im programmieren bin....aber immerhin glaub ich, dass der ansatz eigentlich funktionieren müsste


majolo - Sa 28.05.05 15:05

Schau dir doch mal den RSA-Algorithmus an. Der verschlüsselt recht sicher.
http://www.thg.aa.bw.schule.de/Notizbuch/rsa/ oder einfach mal googeln.


Fabian W. - Sa 28.05.05 15:07

Das dürfte ungefähr das sein was du suchst:


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:
const
original   = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ'+
             'abcdefghijklmnopqrstuvwxyzÄÖÜäöüß';
schluessel = 'MKrLcDXSfghäUöHVWjIZlNYvÄdx' +
             'an qsoPbAEBTFÖCyzükÜGmOßJweQRiptu';

procedure Tform1.Button1Click(Sender: TObject); //verschlüsseln
var
Eingabe, Ausgabe : String;
x,laenge,position : integer;
begin
Eingabe := Memo1.Text;
Ausgabe := '';
laenge := Length(Eingabe);
for x:= 1 to laenge do
begin
position := Pos(Eingabe[x],original);
if position <> 0 then
Ausgabe := Ausgabe + schluessel[position]
else
Ausgabe := Ausgabe + Eingabe[x];
end;
Memo2.Text := Ausgabe;
end;


Alles was du jetzt noch machen musst, is aus der Const ne Variable zu machen, und die bei jedem neuen wort nach deinen Wünschen umformen.


AXMD - Sa 28.05.05 15:09

Gut, von mir aus, aber den Code wird sich niemand ansehen, wenn er so formatiert ist wie jetzt und keine Kommentare hat. Ich hätte das so gelöst:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var
  s: String//Text
  i: Integer; //Zählvariable
  text: set of Char; //Menge der im Text vorhandenen Zeichen
begin
  s := UpperCase(Edit1.Text); //Nur Großbuchstaben (kannst du ja ändern falls verlangt)

  text := []; //Initialisieren (EDIT: vergessen, sorry, hab atm kein Delphi)

  for i := 1 to Length(s) do //Vorhandene Zeichen der Menge hinzufügen
    text := text + [s[i]];

  for i := Ord('A'to Ord('Z'do begin //Alle Buchstaben durchgehen
    if not(Chr(i) in text) then //Wenn Zeichen noch nicht in der Menge vorkommt...
      s := s + Chr(i); //...an String anhängen
    end;

  Edit2.Text := s; //Ausgeben
end;


AXMD


pbczero - Sa 28.05.05 15:20

ist irgendwie logisch, aber wenn ich das proggi damit starte erhalte ich als Code:

ERNBDGIKLOSTUWXYZ

und da feht doch die Hälfte...


AXMD - Sa 28.05.05 15:30

Was steht in Edit1?

AXMD


pbczero - Sa 28.05.05 15:46

ern oder ERN


AXMD - Sa 28.05.05 15:48

Hab im oberen Quelltext eine Zeile hinzugefügt. Probier's mal so.

AXMD


pbczero - Sa 28.05.05 16:21

danke!!!, nun klappt es....damit werd ich dann wohl meinen lehrer zufriedenstellen...also wenns fertig ist


AXMD - Sa 28.05.05 16:26

user profile iconpbczero hat folgendes geschrieben:
danke!!!, nun klappt es....damit werd ich dann wohl meinen lehrer zufriedenstellen...also wenns fertig ist


Du solltest es aber verstehen und nicht nur kopieren. Deshalb frag lieber, wenn du Fragen hast. Weil wenn dein Lehrer dahinterkommt, dass du das nicht verstehst, sondern nur kopiert hast, sieht's schlecht um deine Note aus.

AXMD