![]() |
Informatik klausur / krytologie
hi!
habt ihr schonmal ne klausur über kryptologie geschrieben? insbesondere transposition / substitution ( caesar / co ) caesar ist ja einfach und dazu hab ich auch schon ein nettes prog geschrieben - nur irgendwie bekomm ich das hier nicht so ganz auf die reihe: aufgabe: du haste ein codewort: hausburg: daraus macht der computer hausbrg ... er lässt alle buchstaben weg die schonmal vorkamen daraus macht der pc ein geheimalphabet: in diesem falle hausbrgcdefijklmnopqtvwxyz "darunter" legst du das normale alaphabet und verschlüsselst ein wort kann mir wer das programmieren *Dreist gefragt* am besten man arbeitet mit 2 arrays, oder? helft mir bitte bitte bitte :love: danke !!! |
das einlesen hab ich soweit fertig - er stoppt nur beim 2. gleichen buchstaben:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var gtext: array[1..26] of char; gwort, alpha: string; a, b, f, x, zaehler: integer; i: char; begin alpha := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; gwort := Edit1.Text; b := 0; f := 1; for a := 1 to 26 do gtext[a] := ' '; for zaehler := 1 to length(gwort) do begin i := gwort[zaehler]; if i <> ' ' then begin x := ord(i); if (x <= 122) and (x >= 97) then x := x-32; i := chr(x); for a := 1 to 26 do if gtext[a] = i then f := -1; if f = 1 then begin b := b + 1; gtext[b] := i; end; end; memo1.text := gtext; end; |
Moin Timo,
meinst Du das etwa so:
Delphi-Quellcode:
var
sGeheim : string; const _sAlpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; procedure TForm1.Button1Click(Sender: TObject); var sBasis : string; i : integer; begin // Erzeugen des Geheimalphabetes sBasis := UpperCase(Edit1.Text)+_sAlpha; sGeheim := StringOfChar(#32,26); for i := 1 to 26 do begin sGeheim[i] := sBasis[1]; sBasis := StringReplace(sBasis,sGeheim[i],'',[rfReplaceAll]); end; // Nur zu Testzwecken ShowMessage(sGeheim); end; procedure TForm1.Button2Click(Sender: TObject); var i : integer; sCrypt : string; sOriginal : string; begin // Ergebnis initialisieren sCrypt := StringOfChar(#32,Length(Edit2.Text)); sOriginal := UpperCase(Edit2.Text); // Alle Zeichen A bis Z codieren, den Rest // unverändert übernehmen for i := 1 to Length(Edit2.Text) do begin if sOriginal[i] in ['A'..'Z'] then begin sCrypt[i] := sGeheim[ord(sOriginal[i])-64]; end else begin sCrypt[i] := sOriginal[i]; end; end; Edit3.Text := sCrypt; end; |
Delphi-Quellcode:
Das macht die doppelten weg und den Schlüssel. Nicht so perfekt, aber immerhin!
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); function KickDouble(Old: String): String; function BuildKey(Upon_What: String): String; private { Private declarations } public { Public declarations } end; var Form1: TForm1; Schlussel: String; Const Allowed: string = 'abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVXYZ1234567890'; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin Schlussel := edit1.Text; Schlussel := KickDouble(Schlussel); Label1.Caption := Schlussel; Schlussel := BuildKey(Schlussel); label2.Caption := Schlussel; end; function TForm1.KickDouble(Old: String): String; var i,j: integer; begin SetLength(Result,1); Result[1] := Old[1]; for i := 2 to Length(Old) do for j := 1 to Length(Result) do if Old[i] = Result[j] then break else if j = Length(Result) then begin SetLength(Result,succ(Length(Result))); Result[Length(Result)] := Old[i]; end; end; function TForm1.BuildKey(Upon_What: String): String; var i,j: integer; begin Result := KickDouble(Upon_What + Allowed); end; end. |
Der Schlüssel muss mindestens 2 Stellen lang sein, aber das geht ja wohl, an sonsten muss man es gleich einfügen. Was du dann damit machen muss kommt gleich.
|
So, dann noch das dabei
Delphi-Quellcode:
und dann kannst du mit
function TForm1.Encrypt(Plain_Text: String; KeyToUse: String): String;
var i,j: integer; lpt,lks: integer; //Längenangaben: PlainText, KeyString begin lks := Length(KeyToUse); //Länge der Schlüsselzeilen lpt := Length(Plain_Text); //Länge des zu verschlüsselnden Textes SetLength(Result,lpt); //Länge des Ergebnisses for i := 1 to lpt do //Den kompletten String lang for j := 1 to lks do //Die komplette Schlüssel-Zeile if Plain_Text[i] = Allowed[j] then //vergleichen begin Result[i] := KeyToUse[j]; //und den entsprechenden Eintrag Break; //wählen und abbrechen end else if j = lks then //Wenn nicht gleich und alle durch Result[i] := Plain_Text[i]; //alten nehmen end; function TForm1.Decrypt(Crypted_Text: String; KeyToUse: String): String; var i,j: integer; //Schleifenvariablen lct,lks: integer; //Längenvariablen begin lks := Length(KeyToUse); //Länge der Schlüssezeilen lct := Length(Crypted_Text); //Länge der zu entschlüsselnden Textes SetLength(Result,lct); //Länge des Ergebnisses for i := 1 to lct do //Den kompletten String lang for j := 1 to lks do //Die komplette Schlüssel-Zeile if KeyToUse[j] = Crypted_Text[i] then //vergleichen begin Result[i] := Allowed[j]; //und den entsprechenden Eintrag Break; //wählen und abbrechen end else if j = lks then //Wenn nicht gleich und alle durch Result[i] := Crypted_Text[i]; //gleich lassen end; EinString := Encrypt('blabla',Schlussel); Test := DeCrypt(Einstring,Schlussel); ver und entschlüsseln. Test muss dann 'blabla' ergeben. Du kannst die variable "allowed" nach belieben ändern. Der Code ist für deinen Fall nicht der einfachste, aber du kannst dafür einfach: |
für keytouse einen array of string nehmen und dann jedes zeichen mit einem anderen schlüssel verschlüsseln
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 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