AGB  ·  Datenschutz  ·  Impressum  







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

Delphi Kryptologie

Ein Thema von LEmax474 · begonnen am 4. Nov 2008 · letzter Beitrag vom 5. Nov 2008
Antwort Antwort
LEmax474

Registriert seit: 4. Nov 2008
2 Beiträge
 
#1

Delphi Kryptologie

  Alt 4. Nov 2008, 16:16
Hallo ihr Lieben,
ich soll für die Schule ein kleines Verschlüsselungsprogramm schreiben, indem wir auch die VErschlüsselung uns ausdenken. Es muss nichts hochsicheres sein aber es sollte funktionieren. Es ist eine Vigenere-Verschlüsselung.
Ich möchte, dass der Benutzer ein Passwort eingibt und dann beginnt folgendes:
Das Programm soll die erste Hälfte des Textes mit der Procedure Vigenere Verschlüsseln, die zweite Hälfte des Textes mit der Procedure Vigenerzwei: Vigenerezwei nutzt den umgedrehten Schlüssel.
BSP: Hallo_wie_geht_es sind 17 Buchstaben (Leerzeichen ist _) Somit sollen die ersten 9 mit dem richtigen PW (zb.Hallo) verschlüsselt werden, die restlichen 8 mit dem umgerehten PW (ollah)
Nun ist meine Frage: kann sich jemand mal meinen Quelltext anschauen und mir sagen wie man diese Unterteilung macht? (am betsen auch noch für das entschlüsseln)
Dazu sei gesagt dass ich und mein Kumpel uns schon 3Stunden damit aberackert haben das zuschreiben mit :
for i := 1 to (length(klartext) div 2) usw hat es nicht richtig funktioniert.



Delphi-Quellcode:
UNIT uKryptobox;
(* ******************************************************************** *)
(* K L A S S E : TKryptobox                                             *)
(* -------------------------------------------------------------------- *)
(* Aufgabe     : Einen Text ver- und entschluesseln nach dem Caesar-    *)
(*               verfahren. Der Rohtext wird vorbehandelt: nur 'A'..'Z' *)
(*               zugelassen, kleine Buchstaben werden in grosse umgewan-*)
(*               Blanks, Satzzeichen als Blanks, der Rest wird ausgefil-*)
(*               tert.                                                  *)
(* ******************************************************************** *)

INTERFACE
(* ========================== Export ================================== *)
uses Sysutils, classes, dialogs, StrUtils;

type
  TKryptoBox = class
              private
               Klartext,
               Geheimtext : string;
               Schluessel : string;
               key : integer;
              public
               constructor Init;
               procedure SetKlartext (kt : string);
               function GetKlartext : string;
               procedure SetGeheimtext (gt : string);
               function GetGeheimtext : string;
               procedure Verschluesseln; virtual;
               procedure Entschluesseln; virtual;
               procedure SetSchluessel (s : string); virtual;
               procedure vigenere;
               procedure entvigenere;
               procedure vigenerezwei;
               procedure entvigenerezwei;
               procedure umdrehen;

              private
               function GetStellenWertVon (Zeichen : char) : integer;
               function GetZeichenVon (StellenWert : integer) : char;
               procedure Vorbehandeln (var txt : string);
             end;




IMPLEMENTATION
(* ==================================================================== *)

constructor TKryptobox.Init;
(* -------------------------------------------------------------------- *)
begin
  Klartext := '';
  Geheimtext := '';
end;

procedure TKryptobox.SetKlartext (kt : string);
(* -------------------------------------------------------------------- *)
begin
  Klartext := kt
end;


function TKryptobox.GetKlartext : string;
(* -------------------------------------------------------------------- *)
begin
  Result := Klartext
end;


procedure TKryptobox.SetGeheimtext (gt : string);
(* -------------------------------------------------------------------- *)
begin
  Geheimtext := gt;
end;


function TKryptobox.GetGeheimtext : string;
(* -------------------------------------------------------------------- *)
begin
  Result := Geheimtext;
end;


procedure TKryptobox.SetSchluessel (s : string);
(* -------------------------------------------------------------------- *)
begin
   if s =''
   then Schluessel := 'a'
   else schluessel := s ;
end;


procedure TKryptobox.Verschluesseln;
(* -------------------------------------------------------------------- *)
var
i : integer;
begin
  vigenere;
  vigenerezwei;
   end;


procedure TKryptobox.Entschluesseln;
begin
 entvigenere;
 entvigenerezwei;
end;

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


function TKryptoBox.GetZeichenVon (StellenWert : integer) : char;
(* -------------------------------------------------------------------- *)
begin
   case Stellenwert of
     0..25 : Result := chr(Stellenwert + 65);
        26 : Result := ' ';
   end;
end;


procedure TKryptoBox.Vorbehandeln (var txt : string);
(* -------------------------------------------------------------------- *)
(* Auftrag: Rohtext von störenden Zeichen befreien                      *)
(* vorher :                                                             *)
(* nachher: kleine in GROSSE Buchstaben gewandelt; Umlaute umgewandelt; *)
(*          LeerZeichen, Satzzeichen als BLANK;                         *)
(* -------------------------------------------------------------------- *)
var
  i : integer;
  Zeichen : char;
  Hilfstext : string;

begin
   Hilfstext := '';

   for i := 1 to Length(txt) do
   begin
     Zeichen := txt[i];

     case Zeichen of

     'A'..'Z' : begin
                   Hilfstext := Hilfstext + Zeichen;
                end;

     'a'..'z' : begin
                   Zeichen := UPCASE(Zeichen);
                   Hilfstext := Hilfstext + Zeichen;
                end;


     'Ä', 'ä' : begin
                   Zeichen := 'A';
                   Hilfstext := Hilfstext + Zeichen;
                   Zeichen := 'E';
                   Hilfstext := Hilfstext + Zeichen;
                end;

     'Ö', 'ö' : begin
                   Zeichen := 'O';
                   Hilfstext := Hilfstext + Zeichen;
                   Zeichen := 'E';
                   Hilfstext := Hilfstext + Zeichen;
                end;

     'Ü', 'ü'  : begin
                   Zeichen := 'U';
                   Hilfstext := Hilfstext + Zeichen;
                   Zeichen := 'E';
                   Hilfstext := Hilfstext + Zeichen;
                 end;

     'ß'      : begin
                   Zeichen := 'S';
                   Hilfstext := Hilfstext + Zeichen;
                   Zeichen := 'S';
                   Hilfstext := Hilfstext + Zeichen;
                end;

     chr(32) : begin
                  Zeichen := ' ';
                  Hilfstext := Hilfstext + Zeichen;
                end;

     chr(13) : begin
                  Zeichen := ' ';
                  Hilfstext := Hilfstext + Zeichen;
                end;

     '.'      : begin
                  Zeichen := ' ';
                  Hilfstext := Hilfstext + Zeichen;
                end;

     ','      : begin
                  Zeichen := ' ';
                  Hilfstext := Hilfstext + Zeichen;
                end
       else
               begin (* den Rest ueberlesen *)
               end;
     end; (* case *)
   end; (* while *)

   txt := ''; // urspruenglichen Text loeschen und neuen zuweisen
   txt := Hilfstext;
end;


procedure TKryptobox.vigenere;
 var
  i,a,b,c,
  KTWert,
  GTWert : integer;
  Zeichen : char;
begin
  Geheimtext := '' ;
  Vorbehandeln(Klartext);
  Vorbehandeln(schluessel) ;
    // hier kommt Ihr Verschluesselungsalgorithmus hin!
  b:= 1;
  for i := 1 to (length(klartext)) do
  begin
  Zeichen := klartext[i] ;
  Ktwert := Getstellenwertvon(klartext[i]) ;
  c := Getstellenwertvon(schluessel[b]) ;
  a := KTwert + c ;
  Zeichen := Getzeichenvon(a mod 27);
  Geheimtext:= Geheimtext + zeichen ;
  b := (b + 1) mod (length(schluessel)+1) ;
  If b = 0 then
  b := 1 ;
  end;


END;

procedure tkryptobox.entvigenere;
var
  i,b,a,c ,d ,
  KTWert,
  GTWert : integer;
  Zeichen : char;

begin
  Klartext := '' ;

  Vorbehandeln(schluessel) ;
  // hier kommt Ihr Verschluesselungsalgorithmus hin!
  b:= 1;
  for i := 1 to (length(Geheimtext)-2) do
  begin

  Zeichen := Geheimtext[i] ;
  Ktwert := Getstellenwertvon(Geheimtext[i]) ;
  c := Getstellenwertvon(schluessel[b]) ;
   a := (KTwert - c+27) mod 27 ;
  Zeichen := Getzeichenvon((a));
  Klartext := Klartext + Zeichen ;
  d:= (length(schluessel)+1) ;
  b:= b + 1 ;
  b := (b) mod d;
  If b = 0 then
  b := 1 ;

end;
end;


procedure tkryptobox.vigenerezwei;
 var
  i,a,b,c,
  KTWert,
  GTWert : integer;
  Zeichen : char;
begin
umdrehen;
  Geheimtext := '' ;
  Vorbehandeln(Klartext);
  VOrbehandeln(schluessel) ;
  showmessage(schluessel);
  // hier kommt Ihr Verschluesselungsalgorithmus hin!
  b:= 1;
  for i := 1 to (length(klartext)) do
  begin
  Zeichen := klartext[i] ;
  Ktwert := Getstellenwertvon(klartext[i]) ;
  c := Getstellenwertvon(schluessel[b]) ;
  a := KTwert + c ;
  Zeichen := Getzeichenvon(a mod 27);
  Geheimtext:= Geheimtext + zeichen ;
  b := (b + 1) mod (length(schluessel)+1) ;
  If b = 0 then
  b := 1 ;
  end;


END;



procedure tkryptobox.entvigenerezwei;

var
  i,b,a,c ,d ,
  KTWert,
  GTWert : integer;
  Zeichen : char;

begin
  umdrehen;
  Klartext := '' ;

  Vorbehandeln(schluessel) ;
  // hier kommt Ihr Verschluesselungsalgorithmus hin!
  b:= 1;
  for i := 1 to (length(Geheimtext)-2) do
  begin

  Zeichen := Geheimtext[i] ;
  Ktwert := Getstellenwertvon(Geheimtext[i]) ;
  c := Getstellenwertvon(schluessel[b]) ;
   a := (KTwert - c+27) mod 27 ;
  Zeichen := Getzeichenvon((a));
  Klartext := Klartext + Zeichen ;
  d:= (length(schluessel)+1) ;
  b:= b + 1 ;
  b := (b) mod d;
  If b = 0 then
  b := 1 ;
 end;
end;

procedure tkryptobox.umdrehen;
begin
 schluessel := reverseString(schluessel)
end;

end.
Anbei kann ich euch den link geben dass ihr euch das auf den rechner ladet.

[edit=Phoenix]Code in Delphi-Tags geändert. Mfg, Phoenix[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#2

Re: Delphi Kryptologie

  Alt 4. Nov 2008, 16:24
So, mit der richtigen Formatierung für Delphi sieht das gleich besser aus *g*
Du kannst das Ding auch gleich hier an den Beitrag anhängen. Das ist geschickter als Links zu posten.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
LEmax474

Registriert seit: 4. Nov 2008
2 Beiträge
 
#3

Re: Delphi Kryptologie

  Alt 4. Nov 2008, 16:30
als link hatte ich nen rs link

http://rapidshare.com/files/16061173...habet.rar.html
  Mit Zitat antworten Zitat
Benutzerbild von Mikescher
Mikescher

Registriert seit: 3. Jun 2008
Ort: Offenburg
265 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Delphi Kryptologie

  Alt 4. Nov 2008, 18:46
Zitat von LEmax474:
for i := 1 to (length(klartext) div 2) usw hat es nicht richtig funktioniert.
Wa hat denn daran genau nicht funktioniert ??? ... so hätte ich es auch gemacht
Mike
Operation gelungen, Patient tot.

http://www.mikescher.com
  Mit Zitat antworten Zitat
Entenzwerg

Registriert seit: 4. Nov 2008
3 Beiträge
 
#5

Re: Delphi Kryptologie

  Alt 4. Nov 2008, 19:02
wir wissen nicht genau was falsch ist der hat immer nur eine Hälfte kodiert demzufolge war das dekodieren natürlich unsinn
  Mit Zitat antworten Zitat
Benutzerbild von bigben37
bigben37

Registriert seit: 19. Dez 2007
Ort: Freiburg
116 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Delphi Kryptologie

  Alt 4. Nov 2008, 19:11
vielleicht mal ein Ansatz:
Delphi-Quellcode:
procedure Verschluessle;
var
  l: Integer;
  text1, text2: string;
begin
  l := Length(klartext);
  text1 := Copy(klartext, 1, l div 2);
  text2 := Copy(klartext, l div 2 + 1, l);
end;
Jetzt kannst du ja text1 mit Vigenere verschlüsslen und text2 mit Vigenere2.

Für das Entschlüsseln genau das gleiche.

Noch ein Anmerkung:
Man kann das natürlich so machen wie Du ihr, aber ich würde die Verschlüsselungsproceduren mit Paramenter und Rückgabewert schreiben, das finde ich übersichtlicher.

Edit:
Mir fällt an eurem Code auf, dass ihr das da gar nicht macht, sondern Vigenere und Vigenere2 auf den gesammten Text anwenden. Wenn ihr mal euren Versuch, der nicht funktioniert posten könntet, dann wüssten wir, woran wir wären.

[edit=Admin]Cache aktualisiert. Mfg, Daniel[/edit]
Benjamin
Optimismus ist nur ein Mangel an Information
  Mit Zitat antworten Zitat
Benutzerbild von Mikescher
Mikescher

Registriert seit: 3. Jun 2008
Ort: Offenburg
265 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Delphi Kryptologie

  Alt 4. Nov 2008, 19:54
@Benjamin:

Deine Code würde aber wenn Length(klartext) gerade wäre nicht richtig funktionieren machs lieber so :


procedure Verschluessle;
var
l: Integer;
text1, text2: string;
begin
l := Length(klartext);
text1 := Copy(klartext, 1, l div 2);
text2 := Copy(klartext, l div 2 + 1, l);
if Length(klartext) mod 2 = 0 then
text2 := Copy(klartext, l div 2 + 1, l);
end;


Vergiss es hab drei Quelltexte die ich hier zum testen geschrieben hab zusammen gemischt und ... naja ... man sieht ja was dabei herausgekommen ist

MfG Mike

PS:

Diese vier Zeilen :

Delphi-Quellcode:
                   Zeichen := 'A';
                   Hilfstext := Hilfstext + Zeichen;
                   Zeichen := 'E';
                   Hilfstext := Hilfstext + Zeichen;
könnte man auch einfach so schreiben (wegen der Übersichtlichkeit) :
Hilfstext := Hilfstext + 'AE'
Mike
Operation gelungen, Patient tot.

http://www.mikescher.com
  Mit Zitat antworten Zitat
Benutzerbild von bigben37
bigben37

Registriert seit: 19. Dez 2007
Ort: Freiburg
116 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Delphi Kryptologie

  Alt 4. Nov 2008, 20:06
Delphi-Quellcode:
var
  l: Integer;
  text1, text2: string;
  klartext : string;
begin
  klartext := '123456';
  l := Length(klartext);
  text1 := Copy(klartext, 1, l div 2);
  text2 := Copy(klartext, l div 2 + 1, l);
  ShowMessage(text1);
  ShowMessage(text2);
end;

Zitat von Mikescher:
@Benjamin:

Deine Code würde aber wenn Length(klartext) gerade wäre nicht richtig funktionieren machs lieber so :
Wieso. Bei dem Quelltext da oben gibt er 123 und 456 aus.
Benjamin
Optimismus ist nur ein Mangel an Information
  Mit Zitat antworten Zitat
Entenzwerg

Registriert seit: 4. Nov 2008
3 Beiträge
 
#9

Re: Delphi Kryptologie

  Alt 4. Nov 2008, 20:09
Zitat von bigben37:
Edit:
Mir fällt an eurem Code auf, dass ihr das da gar nicht macht, sondern Vigenere und Vigenere2 auf den gesammten Text anwenden. Wenn ihr mal euren Versuch, der nicht funktioniert posten könntet, dann wüssten wir, woran wir wären.
mh wie meinst du das wir verwenden die 2 verschlüsselungen auf den ganzen Text steht auch oben(wenn du willst kann ich dir das auch schnell raussuchen weiß aber net genau was du meinst^^)

edit : mir fällt gerade auf, dass Max den falschen Quelltext hochgeladen hat... das kann so ja net klappen
natürlich sollte bei vigenere for i := 1 to length(Klartext) div 2 stehen und bei vigenere 2 eben die zweite hälfte...
  Mit Zitat antworten Zitat
Entenzwerg

Registriert seit: 4. Nov 2008
3 Beiträge
 
#10

Re: Delphi Kryptologie

  Alt 5. Nov 2008, 18:49
erledigt
  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 05:47 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