Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Entschluesselungsalgorithmus (https://www.delphipraxis.net/155501-entschluesselungsalgorithmus.html)

Noris 26. Okt 2010 14:25


Entschluesselungsalgorithmus
 
Hallo,

ich schreibe ein Entschluesselungsprogramm (kein sehr sicheres) nur eine Übung.
Ich habe den Verschluesselungsalgorithmus schon fertig und er funktioniert jedoch funktioniert die Entschlusselung nicht...
Kann mir da jmd. helfen?

Hier die Verschluesselungsprocedure/function:


Delphi-Quellcode:
procedure TKryptobox.Verschluesseln;
(* -------------------------------------------------------------------- *)
var
  i,
  k,
  KTWert, KeyL,
  GTWert, EWert : integer;
  Zeichen : char;

begin
  Geheimtext := '' ;
  Vorbehandeln(Klartext);
  Vorbehandeln(Schluessel);
  Zwischentext := Klartext;
  // hier kommt Ihr Verschluesselungsalgorithmus hin!
for i := 1 to length(Klartext) do
  begin
    for k:=1 to length(Schluessel) do
    begin
      if Klartext[i] = Schluessel[k] then
      begin
        if k mod 2 = 0
          then Zwischentext[i] := Schluessel[k-1]
          else if k < length(Schluessel)
                  then Zwischentext[i] := Schluessel[k+1]

      end;
    end;

    Zeichen := Zwischentext[i];
    KTwert := GetStellenwertVon(Zeichen);
    KeyL := Length(Schluessel);
    GTWert := (KTWert + KeyL + getStellenWertvon(Schluessel[3])) mod 27;
    //Zwischentext := Zwischentext + GetZeichenVon(GTWert);
    Zeichen := GetZeichenVon(GTWert);

    Geheimtext := Geheimtext + Zeichen;


  (*1. FOR-END*)
  end;

end;
Der Entschlüsselungsalgorithmus sieht bisher so aus kann aber auch komplett falsch sein.
Fall jmd. noch zusätzliche Infos brauch einfach fragen ich stelle sie dann rein!


Delphi-Quellcode:
procedure TKryptobox.Entschluesseln;
(* -------------------------------------------------------------------- *)
var
  i,k,
  KTWert,
  GTWert, KeyL : integer;
  Zeichen : char;

begin
  Klartext := '';
  Vorbehandeln(Geheimtext);
  Vorbehandeln(Schluessel);
    Zwischentext := Geheimtext;
  // hier kommt Ihr Entschluesselungsalgotithmus hin!
 for i:= 1 to Length(Geheimtext) do
 begin
 
  for k:=1 to length(Schluessel) do
    begin
      if Geheimtext[i] = Schluessel[k] then
        begin
          if k mod 2 = 0
           then Zwischentext[i] := Schluessel[k-1]
           else if k < length(Schluessel)
                   then Zwischentext[i] := Schluessel[k+1]


        end;
    end;

    Zeichen := Zwischentext[i];
    GTwert := GetStellenwertVon(Zeichen);
    KeyL := Length(Schluessel);
    KTWert := (GTWert - KeyL + 2700 - getStellenWertvon(Schluessel[3])) mod 27;
    //Zwischentext := Zwischentext + GetZeichenVon(GTWert);
    Zeichen := GetZeichenVon(KTWert);

    KLartext := Klartext + Zeichen;
  (*Klartext := Zwischentext;


  Zeichen := Geheimtext[i];
 GTWert := GetStellenwertVon(Zeichen);
 KeyL := Length(Schluessel);
 KTWert := (GTWert - KeyL +2700 - getStellenWertvon(Schluessel[3])) mod 27;
 Klartext := Klartext + GetZeichenVon(KTWert); *)

 //Zeichen := Geheimtext[i];
 //GTWert := GetStellenwertVon(Zeichen);
 //KTWert := (GTWert -GetStellenwertvon(Schluessel[1+(i-1) mod length(Schluessel)]) +2700) mod 27;
 //Klartext := Klartext + Getzeichenvon(KTWert);
 end;
end;
alles bissel unordentlich weil ich mich wahrscheinlich total verritten habe :-(

Schonmal danke im vorraus ;-)

hier nochmal die GetStellenWertVon-Function:

Delphi-Quellcode:
function TKryptoBox.GetStellenWertVon (Zeichen : char) : integer;
(* -------------------------------------------------------------------- *)
begin
   case Zeichen of
    'A'..'Z' : Result := ord(Zeichen) - 65 ;
     ' '    : Result := 26;
   end;
end;



Mfg Noris

fui-tak 26. Okt 2010 14:52

AW: Entschluesselungsalgorithmus
 
Soooo ganz hab ich deinen Algorithmus noch nicht verstanden. Vielleicht könntest du im Code ein paar Kommentare machen, was du willst, was passieren soll.
Und was macht die Anfrage GetStellenwertVon(...) ?


Dann hätte ich noch die Vermutung, dass es Probleme bei deiner mod-Rechnung gibt.
Wenn du zum Beispiel rechnest:
70 mod 27 = 16
und
97 mod 27 = 16


Bei 70 und 97 kommt beides mal 16 raus, was bedeutet, dass das verschlüsselte Zeichen bei beiden das Gleiche ist.
Daraus folgt dann ein Problem beim Entschlüsseln, weil das Programm ja nicht wissen kann, ob da vorher eine 70 oder 97 war.


Wenn es dir nicht so darum geht einen eigenen Algorithmus zu entwickeln, kann ich dir empfehlen, mal zu versuchen die Vigenère-Verschlüsselung umzusetzen.




Edit:
Hui, mein 100. Beitrag

Noris 26. Okt 2010 15:26

AW: Entschluesselungsalgorithmus
 
Und wie wäre es möglich das problem mit dem "mod" zu lösen?

hier die GetStellenWertVon-function:

Delphi-Quellcode:
function TKryptoBox.GetStellenWertVon (Zeichen : char) : integer;
(* -------------------------------------------------------------------- *)
begin
   case Zeichen of
    'A'..'Z' : Result := ord(Zeichen) - 65 ;
     ' '    : Result := 26;
   end;
end;

fui-tak 26. Okt 2010 16:31

AW: Entschluesselungsalgorithmus
 
Erklär doch mal was du hier machen willst, ich sehe da nämlich nur einen geringen Sinn........

Delphi-Quellcode:
for i := 1 to length(Klartext) do
  begin
    for k:=1 to length(Schluessel) do
    begin
      if Klartext[i] = Schluessel[k] then
      begin
        if k mod 2 = 0
          then Zwischentext[i] := Schluessel[k-1]
          else if k < length(Schluessel)
                  then Zwischentext[i] := Schluessel[k+1]

      end;
    end;

...
Beispiel deiner Funktion:
Klartext := 'HALLOWELT';
Schluessel := 'HOLBERT';

Das (müsste) passieren:
Klartext[1] = Schluessel[1] stimmt
k ist 1, also ist k mod 2 = 1 -> else tritt ein
Zwischentext: 'IALLOWELT';

Klartext[1] = Schluessel[2] stimmt nicht
...


-> jedenfalls ist der erste Buchstabe schonmal das 'I'


Jetzt machen wir das mit deiner Methode wieder rückgängig
Delphi-Quellcode:
 for i:= 1 to Length(Geheimtext) do
 begin
 
  for k:=1 to length(Schluessel) do
    begin
      if Geheimtext[i] = Schluessel[k] then
        begin
          if k mod 2 = 0
           then Zwischentext[i] := Schluessel[k-1]
           else if k < length(Schluessel)
                   then Zwischentext[i] := Schluessel[k+1]


        end;
    end;

...
I ist nicht gleich dem ersten Buchstaben aus dem Schlüssel, der ist ja H.
I kommt gar nicht im Schlüssel vor, also wird Geheimtext[1] = Schluessel[k] nie zutreffen und das I wird nie rückgängig gemacht





Im Prinzip musst du deine Verschlüsselungsmethode beim Entschlüsseln genau umgekehrt machen.
Das
Delphi-Quellcode:
Zeichen := Zwischentext[i];
    GTwert := GetStellenwertVon(Zeichen);
    KeyL := Length(Schluessel);
    KTWert := (GTWert - KeyL + 2700 - getStellenWertvon(Schluessel[3])) mod 27;
    //Zwischentext := Zwischentext + GetZeichenVon(GTWert);
    Zeichen := GetZeichenVon(KTWert);

    KLartext := Klartext + Zeichen;
muss also in geänderter Form oberhalb von
Delphi-Quellcode:
for i:= 1 to Length(Geheimtext) do
 begin
 
  for k:=1 to length(Schluessel) do
    begin
      if Geheimtext[i] = Schluessel[k] then
        begin
          if k mod 2 = 0
           then Zwischentext[i] := Schluessel[k-1]
           else if k < length(Schluessel)
                   then Zwischentext[i] := Schluessel[k+1]


        end;
    end;
stehen, weil es beim verschlüsseln schon in dieser Reihenfolge stand.

Wenn du nochmal genauer erklärst, was deine einzelnen Schritte machen sollen, können wir dir vielleicht weiter helfen

Noris 28. Okt 2010 14:23

AW: Entschluesselungsalgorithmus
 
Liste der Anhänge anzeigen (Anzahl: 1)
So ich habe mal das ganze Programm als anhang hinzugefügt so dass ihr es euch runterladen könnt weil es glaube ich ein wenig zu unübersichtlich werden würde wenn ich da jede sache einzel als [delphi]-code posten würde. Also guckt es euch mal an. Ich hoffe ihr könnt mir helfen.

fui-tak 28. Okt 2010 15:15

AW: Entschluesselungsalgorithmus
 
Ahh, die Information hat mir gefehlt: es geht um die Cäsar-Verschlüsselung

Ich geb dir dazu mal ein paar Tipps. Code kann ich dir jetzt nicht aufschreiben, weil es sich anscheinend um eine Hausaufgabe handelt.

Also dein Code kommt mir persöhnlich nicht besonders Cäsar-nah vor. Geht es wirklich um Cäsar wenn dein Schlüssel ein String ist? Bei Cäsar ist der Schlüssel nämlich eine Zahl.

Hier mal etwas Pseudo-Code, wie man Cäsar machen könnte:

Code:
Text vorbereiten
Schlüssel vom Typ integer

0 < i <= Länge des Klartextes
begin
   Ord(Klartext an der Stelle i) mit dem Schlüssel Addieren (Alphabeth wird soweit verschoben, wie es der Schlüssel angibt)
   Überlegen, was passieren muss, wenn der addierte Wert größer als der Ord()-Wert von Z ist
   Addierten Wert wieder zum Buchstaben machen mit Chr(...) und beim Geheimtext anhängen
end;
Und Entschlüsseln ist jetzt ganz einfach ...

Noris 28. Okt 2010 17:43

AW: Entschluesselungsalgorithmus
 
Nein es ist keine reine Cäsar-Verschluesselung. Es kommt nämlich dazu dass die Buchstaben des SChluesselwortes mit in die Verschluesselung mit einbezogen werden...
Hausaufgabe?
Nein eigentlich nicht und ich würde mich auch wundern wenn heutzutage ein lehrer Schülern noch diese Sprache beibringt (nichts gegen die Sprache ;-)).

Mfg Noris

paperboy 28. Okt 2010 18:13

AW: Entschluesselungsalgorithmus
 
Zitat:

Zitat von Noris (Beitrag 1058380)
Nein eigentlich nicht und ich würde mich auch wundern wenn heutzutage ein lehrer Schülern noch diese Sprache beibringt (nichts gegen die Sprache ;-)).

aus der Unit uFenster: "Siegfried Spolwig, OSZ Handel"

kurz google bemüht und man findet: http://www.oszhandel.de/gymnasium/faecher/informatik/

will dir ja nix unterstellen aber sieht schon etwas verdächtig aus :wink:

lg paperboy

implementation 28. Okt 2010 18:18

AW: Entschluesselungsalgorithmus
 
Zitat:

Zitat von paperboy (Beitrag 1058386)
kurz google bemüht und man findet: http://www.oszhandel.de/gymnasium/faecher/informatik/

Ähem: Und hier steht die Aufgabe.
Gib doch wenigstens zu, dass es sich um eine Hausaufgabe handelt :roll:

Noris 28. Okt 2010 18:19

AW: Entschluesselungsalgorithmus
 
Liste der Anhänge anzeigen (Anzahl: 1)
erstmal vielen dank an dich.
Leider kommt da noch was :S
Ich bin ein wenig weiter gekommen. Das Problem ist blossdas die Buchstaben die im Schlüssel ungerade sind nicht dekodiert werden. ich würde mich über eine schnelle Antwort.
Ich hänge die neuste Version wieder als Anhang an.

Mfg Noris

PS: Zum neuen post von dir: Ich lerne Delphi mit einem Tutorial bzw. einem Buch was aber nicht so gut ist. Dort ist auch so eine Aufgabe zu finden.
Aus dem Alter bin ich "leider" schon draussen. Aber danke, mal gucken vlt. lässt sich dort etwas brauchbares finden ;-)

Mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz