AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Informatik klausur / krytologie

Ein Thema von Timo · begonnen am 17. Dez 2002 · letzter Beitrag vom 17. Dez 2002
Antwort Antwort
Timo

Registriert seit: 12. Dez 2002
Ort: Dortmund
50 Beiträge
 
Delphi 6 Enterprise
 
#1

Informatik klausur / krytologie

  Alt 17. Dez 2002, 14:44
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

danke !!!
greetz - Timo
  Mit Zitat antworten Zitat
Timo

Registriert seit: 12. Dez 2002
Ort: Dortmund
50 Beiträge
 
Delphi 6 Enterprise
 
#2
  Alt 17. Dez 2002, 14:48
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;
greetz - Timo
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 17. Dez 2002, 15:29
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#4
  Alt 17. Dez 2002, 15:53
Delphi-Quellcode:
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.
Das macht die doppelten weg und den Schlüssel. Nicht so perfekt, aber immerhin!
Michael N.
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#5
  Alt 17. Dez 2002, 15:55
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.
Michael N.
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#6
  Alt 17. Dez 2002, 16:24
So, dann noch das dabei

Delphi-Quellcode:
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;
und dann kannst du mit
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:
Michael N.
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#7
  Alt 17. Dez 2002, 16:26
für keytouse einen array of string nehmen und dann jedes zeichen mit einem anderen schlüssel verschlüsseln
Michael N.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 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