![]() |
Caesar Verschlüsselung und seine Varianten
Aufgabe:
Verschlüsselung/Entschlüsselung von Text durch einfache Umwandlung in ASCII, Caesar-Addition, Caesar-Multiplikation und Caesar (Addition-Multiplikation)... tjoar... ---------------------------------------------------------- ASCCI, Caesar-Addition - verschlüsselung/entschlüsselung funtzt... ------------------------------------------------------------- Bin momentan noch an der Entschlüsselung von einem Caesar-Additionstext... meine Variante momentan funtzt nur mit: -wenn mir die Anzahl(k) bekannt ist, mit der das Alphabet verschoben wurde... brauch aber eine ohne die Kenntnis dieser Zahl... also Brute Force-mäßig... soweit erstma der Quelltext:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, ExtCtrls, Spin; type TForm1 = class(TForm) BtnPrepare: TButton; BtnDelete1: TButton; BtnCode: TBitBtn; BtnDelete2: TButton; BtnDecode: TBitBtn; BtnClose: TBitBtn; SpinEdit1: TSpinEdit; PUe1: TPanel; ComboBox1: TComboBox; EKlar: TMemo; EGeheim: TMemo; Eergebnis: TMemo; Label1: TLabel; procedure ComboBox1Change(Sender: TObject); procedure BtnDelete1Click(Sender: TObject); procedure BtnDelete2Click(Sender: TObject); procedure BtnPrepareClick(Sender: TObject); procedure BtnCodeClick(Sender: TObject); procedure BtnDecodeClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; quelltext: string; Klartext: string; Geheimtext:string; implementation {$R *.dfm} procedure TForm1.BtnDelete1Click(Sender: TObject); begin EKlar.text:=''; end; procedure TForm1.BtnDelete2Click(Sender: TObject); begin EGeheim.Text:=''; end; procedure TForm1.BtnPrepareClick(Sender: TObject); var i: integer; c: char; begin klartext:=EKlar.text; quelltext:=''; for i:=1 to length(klartext) do begin c:=klartext[i]; case c of 'A' .. 'Z' : quelltext := quelltext + c; 'a' .. 'z' : quelltext := quelltext + upcase(c); 'ß' : quelltext := quelltext + 'SS'; 'ä' : quelltext := quelltext + 'AE'; 'ö' : quelltext := quelltext + 'OE'; 'ü' : quelltext := quelltext + 'UE'; 'Ä' : quelltext := quelltext + 'AE'; 'Ö' : quelltext := quelltext + 'OE'; 'Ü' : quelltext := quelltext + 'UE'; end; end; EKlar.text:=quelltext; end; procedure TForm1.BtnCodeClick(Sender: TObject); var i, ASCII, k:Integer; c:char; begin Geheimtext:=''; for i:=1 to length(Quelltext) do case combobox1.ItemIndex of 0: begin c:=Quelltext[i]; ASCII:=ord(c); Geheimtext:=Geheimtext + IntToStr(ASCII); end; 1: begin ASCII:=ord(quelltext[i]); k:=spinedit1.value; ASCII:=ASCII-k; if ASCII<65 then ASCII:=ASCII+26; geheimtext:=geheimtext+chr(ASCII); end; 2: begin end; end; EGeheim.Text:=Geheimtext; end; procedure TForm1.BtnDecodeClick(Sender: TObject); var paar:string; ascii, i, k:integer; zeichen:char; begin geheimtext:=EGeheim.text; klartext:=''; case ComboBox1.ItemIndex of 0: begin for i:=1 to length(geheimtext) div 2 do begin paar:= geheimtext[2*i-1] + geheimtext[2*i]; ascii:= StrToInt(paar); klartext:=klartext + chr(ascii); end; end; 1: begin for i:=1 to length(geheimtext) do begin zeichen:=geheimtext[i]; ASCII:=ord(zeichen); k:=spinedit1.value; ASCII:=ASCII+k; if ASCII>90 then ASCII:=ASCII-26; klartext:=klartext + chr (ASCII); end; end; end; EKlar.text:=klartext; end; procedure TForm1.ComboBox1Change(Sender: TObject); begin if Combobox1.itemindex=1 then begin spinedit1.visible:=true; label1.Visible:=true; end; if Combobox1.ItemIndex=0 then begin spinedit1.Visible:=false; label1.Visible:=false; end; end; end. ![]() ![]() ps: Bin neu hier... Falls es hier irgendwelche Regeln gibt, wie "nicht den ganzen quelltext posten" oder sowas... schonmal sry vorweg ;-) |
Re: Caesar Verschlüsselung und seine Varianten
Also Bruteforcen dürfte bei Verschlüsselungen methodisch ziemlich falsch sein. Sicherlich ist es mit moderner Prozessorleistung möglich, alle Kombinationen durchzuprobieren, aber schon im Altertum hat man Cäsar-Texte mittels Häufigkeitsverteilung decodiert. Ich empfehle dir das gleiche, weil es einfach die "schönste" Lösung ist.
MfG, hanselmansel |
Re: Caesar Verschlüsselung und seine Varianten
Schau dir dazu mal
![]() Bei einem Caesar reicht schon ein einziger geknackter Buchstabe, da die anderen dann nur verschoben sind. k-w //Nachtrag: Kurz: Heufigster Buchstabe ist E. Daraus lässt sich der Rest berechnen. -> Fertig |
Re: Caesar Verschlüsselung und seine Varianten
Häufigkeitsverteilung mag zwar die "schönste" Methode sein, aber dafür ist diese Verteilung auch in jeder Sprache etwas anders. Die Methode arbeitet also gut, wenn man vor dem Entschlüsseln die Sprache des Orginaltextes kennt. Sonst ist sie mehr oder weniger wertlos. :?
Noch ein Tipp zur Codeverbesserung: statt
Delphi-Quellcode:
kann man auch folgendes schreiben:
case c of
'A' .. 'Z' : quelltext := quelltext + c; 'a' .. 'z' : quelltext := quelltext + upcase(c); 'ß' : quelltext := quelltext + 'SS'; 'ä' : quelltext := quelltext + 'AE'; 'ö' : quelltext := quelltext + 'OE'; 'ü' : quelltext := quelltext + 'UE'; 'Ä' : quelltext := quelltext + 'AE'; 'Ö' : quelltext := quelltext + 'OE'; 'Ü' : quelltext := quelltext + 'UE'; end;
Delphi-Quellcode:
case c of
'A' .. 'Z' : quelltext := quelltext + c; 'a' .. 'z' : quelltext := quelltext + upcase(c); 'ß' : quelltext := quelltext + 'SS'; 'ä','Ä' : quelltext := quelltext + 'AE'; 'ö','Ö' : quelltext := quelltext + 'OE'; 'ü','Ü' : quelltext := quelltext + 'UE'; end; |
Re: Caesar Verschlüsselung und seine Varianten
Zitat:
k-w PS: Man könnte eine DB mit den Verteilungen für verschiedene Sprachen anlegen. Dann wird die sprache genommen, deren Verteilung am besten auf den Text zutrifft. |
Re: Caesar Verschlüsselung und seine Varianten
Zitat:
esteinmal: "Herzlich Willkommen in der Delphi-PRAXiS" :hi: Ja, wir haben hier Regeln. Diese hast Du ja sicher auch gelesen ;-) In deinem Thread sehe ich allerdings noch keinen "schlimmen" Verstoss gegen diese. Grundsätzlich solltest Du keine "zu langen" Quellcodes in deinem Thread posten. Aber was ist "zu lange?" Tja, dafür gibt es keine Regel. Dies solltest Du einfach versuchen selber zu entscheiden. Ich persönlich mag es zum Beispiel nicht wenn ich mir die Flossen wund scrollen muss weil ein sehr langes Code-Beispiel in einem Beitrag steht :stupid: Für mich gilt die Formel -> Wenn es, ohne den Sinn zu verfremden möglich ist sollte bei ca. 60 Zeilen schluss sein. Ab dieser Länge hänge ich dann lieber eine Demoprojekt an (oder auch nur die Unit). Aber dies ist, wie gesagt, meine persönliche Meinung. Wenn Du, wie ich hoffe, noch länger in der DP bist wirst Du sicher merken das wir im großen und ganzen ein umgänglicher und lustiger Haufen sind ;-) |
Re: Caesar Verschlüsselung und seine Varianten
teste einfach den entschlüsselten Text auf bestimmte Wörter, wie "der", "die", "das", "und" usw... die Version die am meisten dieser Wörter enthält gibst du als Text aus.
|
Re: Caesar Verschlüsselung und seine Varianten
erstma danke für eure beiträge...
meine brute force variante funtzt...
Delphi-Quellcode:
so...
begin
for k:=0 to 25 do begin klartext:=''; for i:=1 to length(geheimtext) do begin zeichen:=geheimtext[i]; ASCII:=ord(zeichen); ASCII:=ASCII+k; if ASCII>90 then ASCII:=ASCII-26; klartext:=klartext + chr (ASCII); end; Eergebnis.Lines.add(Klartext); end; end; nächstes Problem wäre nun die Verschlüsselung eines Textes per Caesar-Multiplikation...kann mir jemand ma nen Tipp geben wie ich da ran gehen soll? hab nur das mathematische zeugs(Beispiel): f(k)=k*s(Schlüssel) mod p(Primzahl) k="E" s=2, p=31 f(5)=(5*2) mod 31 =10 = "J" nunja... :kotz: |
Re: Caesar Verschlüsselung und seine Varianten
Zitat:
|
Re: Caesar Verschlüsselung und seine Varianten
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz