Einzelnen Beitrag anzeigen

ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: (Delphi) Polybios-Chiffre entschlüsseln

  Alt 6. Mär 2012, 09:41
Anwendung:

polybios in die uses mit aufnehmen.
Der eigentliche Clou der Codierung, nämlich der wirkliche Key, ohne den das Ganze wohl überhaupt keinen echten Sinn machen dürfte, bleibt hier völlig außen vor. Oder habe ich da etwas übersehen ?

Im übrigen ist so etwas wie
Delphi-Quellcode:
 result := '';
  for i:= 1 to length(uncipheredText) do
    begin
      result := result + IntToStr(FKey.getIndex(uncipheredText[i]));
    end;
sehr ineffizienter und schlechter Programmierstil, weil innerhalb der Schleife der ständig wachsende String (result) pausenlos im Arbeitsspeicher komplett umkopiert werden muss.

Um das zu vermeiden, sollte man so etwas besser machen wie z.B.:
Delphi-Quellcode:
   // Variable für aktuelle Position in uncipheredText
   j:=0;
   // Länge von Result fixieren
   // Länge des codierten Strings ist doppelt so groß wie der Klartext
   setlength(result, length(uncipheredText)*2);
   for i:= 1 to length(uncipheredText)*2 do
     begin
       if odd(i) then
       begin
        inc(j);
        // temp ist ein lokaler Shortstring, also ebenfalls mit fixierter Länge
        temp:=IntToStr(FKey.getIndex(uncipheredText[j]));
        result[i] :=temp[1] ;
       end
       else result[i] := temp[2];
     end;
Und das Wichtigste zuletzt: Der Algorithmus in der Unit polybios ist falsch.
Beispiel: Codiere "Delphi". das gibt (fälschlich mit der Unit polybios)
D e l p h i
mit Unit polybios:
14 20 31 40 23 24
richtig aber ist:
14 15 31 35 23 24

Also gibt es schon mit diesem kurzen Klartext von nur 6 Buchstaben im codierten Zustand 2 fehlerhafte Ausgaben.
Der Grund dürfte in den vielfachen DIV- und MOD-Operationen zu suchen sein, deren Logik eher mühsam einsichtig ist.
Ohnehin ginge das alles wesentlich übersichtlicher, einfacher und weniger fehleranfällig - wie bereits vorgeschlagen - mit Hilfe einer Matrix zu machen.

Eine abschließende Bemerkung:
wie sinnvoll ist es eigentlich, zur Hilfesuche für eine offensichtliche/vermutliche Hausaufgabe gleich eine komplette (wenn auch hier ernstlich fehlerhafte) Lösung zu posten. Da ja erkennbar erhebliche Defizite in den Grundlagen vorhanden sind (Zitat: "Aber wenn man eine Matrix benutzen würde, wie implementiert man diese?") wäre es vielleicht hilfreicher gewesen, allein einen entsprechenden Ansatz zu geben, wie man die Lösung angehen könnte, also wie man eine Matrix implementiert und wie man mit ihr umgeht.

Geändert von ASM ( 6. Mär 2012 um 15:14 Uhr) Grund: kleine Korrektur im Code mit Hilfe einer zusätzlichen Positionsvariablen "j"
  Mit Zitat antworten Zitat