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:
Der Entschlüsselungsalgorithmus sieht bisher so aus kann aber auch komplett falsch sein.
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; Fall jmd. noch zusätzliche Infos brauch einfach fragen ich stelle sie dann rein!
Delphi-Quellcode:
alles bissel unordentlich weil ich mich wahrscheinlich total verritten habe :-(
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; 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 |
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 |
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; |
AW: Entschluesselungsalgorithmus
Erklär doch mal was du hier machen willst, ich sehe da nämlich nur einen geringen Sinn........
Delphi-Quellcode:
Beispiel deiner Funktion:
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; ... 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:
I ist nicht gleich dem ersten Buchstaben aus dem Schlüssel, der ist ja H.
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 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:
muss also in geänderter Form oberhalb von
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;
Delphi-Quellcode:
stehen, weil es beim verschlüsseln schon in dieser Reihenfolge stand.
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; Wenn du nochmal genauer erklärst, was deine einzelnen Schritte machen sollen, können wir dir vielleicht weiter helfen |
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.
|
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:
Und Entschlüsseln ist jetzt ganz einfach ...
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; |
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 |
AW: Entschluesselungsalgorithmus
Zitat:
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 |
AW: Entschluesselungsalgorithmus
Zitat:
Gib doch wenigstens zu, dass es sich um eine Hausaufgabe handelt :roll: |
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. |
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