Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verschlüsselungstool (https://www.delphipraxis.net/143064-verschluesselungstool.html)

Nero281084 9. Nov 2009 09:02


Verschlüsselungstool
 
Hallo zusammen,

bräuchte dringend mal hilfe.
Ich muss ein Verschlüsselungtool, in einem formular programmieren.
Ich habe ein memofeld für strings und ein editfeld für integer, das editfeld bestimmt den schlüssel und schlüssel 3 macht aus a ein d.
Der schlüssel bestimmt um wieviele zeichen der text verschoben wird.
Nur hab ich keinen plan wie ich das machen soll. :wall: :wall: :wall: :wall: :wall: :wall:

himitsu 9. Nov 2009 09:18

Re: Verschlüsselungstool
 
das klingt irgendwie nach einer Cäsar-Verschlüsselung

[msdn]Cäsar Verschlüsselung[/msdn]
http://de.wikipedia.org/wiki/Verschiebechiffre
und es gibt auch einige Beispiele dazu im Forum zu finden [dp]cäsar[/dp]


genauer gesag, ist das der Sonderfall Hier im Forum suchenROT13, Bei Google suchenROT13, ROT13

Bernhard Geyer 9. Nov 2009 09:20

Re: Verschlüsselungstool
 
Von verschlüsselung kann man bei Verschiebeschiffre eher nicht reden. Vor 2000 Jahren was das mal in, aber heutzutage ist das maximal eine einfache Verschleierung.

Die Funktionen Ord und Chr sind deine Freunde um Characterzeichen zu verschieben.

himitsu 9. Nov 2009 09:24

Re: Verschlüsselungstool
 
@Bernhard:
Zitat:

Ich muss ein Verschlüsselungtool, in einem formular programmieren.
In der Schule nimmt man auch erher mal einfache Dinge ... muß dann ja nicht so sicher sein, hauptsache es macht ein bissl Arbeit :angel:

DP-Maintenance 9. Nov 2009 09:25

DP-Maintenance
 
Dieses Thema wurde von "Daniel G" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Das ist definitiv kein Beitrag für die CodeLib.

Nero281084 9. Nov 2009 09:53

Re: Verschlüsselungstool
 
ja aber wie programmier ich das dann alles?
ich versteh da leider nur bahnhof(ankunft-abfahrt-information) :coder2:

DeddyH 9. Nov 2009 10:11

Re: Verschlüsselungstool
 
Zitat:

Zitat von Bernhard Geyer
Die Funktionen Ord und Chr sind deine Freunde um Characterzeichen zu verschieben.

Das große A hat den Code 65, d.h. Ord('A') ergibt 65, umgekehrt ergibt Chr(65) das große A. Also musst Du nur aus der 65 die 68 machen, um auf D zu kommen.

Nero281084 9. Nov 2009 14:34

Re: Verschlüsselungstool
 
hab was gefunden, jetzt muss ich nur noch herausfinden wie ich die zahl vom editfeld mit einbeziehen kann.
Hier ist der Quellcode:
Delphi-Quellcode:
function EncryptCaesar(AText: string; AKey: Char): string;
var
  i: Integer;
  tmp: Integer;
  normedKey: Integer;
begin
  SetLength(Result, Length(AText));

  // alles in Großbuchstaben umwandeln
  // Caesar unterscheidet nicht zwischen Groß- und Kleinbuchstaben
  AText := UpperCase(AText);
  AKey := UpCase(AKey);

  if not (AKey in ['A'..'Z']) then
    raise EInvalidArgument.CreateFmt('Schlüssel ungültig(%s). AKey muss ein '
    + 'Buchstabe zwischen ''A'' und ''Z'' sein.', [AKey]);

  normedKey := Ord(AKey) - Ord('A') +1;  // Schlüssel normalisieren

  for i := 1 to Length(AText) do
  begin
    if AText[i] in ['A'..'Z'] then       // nur Buchstaben verschlüsseln
    begin
      tmp := (Ord(AText[i])) - Ord('A'); // Normalisieren
      tmp := (tmp + normedKey) mod 26;   // Verschieben
      Result[i] := Chr(tmp + Ord('A'));  // Denormalisieren
    end
    else
    begin
      Result[i] := AText[i];             // nicht verschlüsseln, wenn kein Buchstabe
    end;
  end;
end;

function DecryptCaesar(AText: string; AKey: Char): string;
var
  i: Integer;
  tmp: Integer;
  normedKey: Integer;
begin
  SetLength(Result, Length(AText));

  // alles in Großbuchstaben umwandeln
  // Caesar unterscheidet nicht zwischen Groß- und Kleinbuchstaben
  AText := UpperCase(AText);
  AKey := UpCase(AKey);

  if not (AKey in ['A'..'Z']) then
    raise EInvalidArgument.CreateFmt('Schlüssel ungültig(%s). AKey muss ein '
    + 'Buchstabe zwischen ''A'' und ''Z'' sein.', [AKey]);

  normedKey := Ord(AKey) - Ord('A') +1;  // Schlüssel normalisieren

  for i := 1 to Length(AText) do
  begin
    if AText[i] in ['A'..'Z'] then       // nur Buchstaben sind verschlüsselt
    begin
      tmp := (Ord(AText[i])) - Ord('A'); // Normalisieren
      tmp := (26 + (tmp - normedKey)) mod 26;   // Verschieben
      Result[i] := Chr(tmp + Ord('A'));  // Denormalisieren
    end
    else
    begin
      Result[i] := AText[i];             // nicht verschlüsseln, wenn kein Buchstabe
    end;
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
   Memo.Text := EncryptCaesar(Memo.Text, 'C');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    Memo.Text := DecryptCaesar(Memo.Text, 'C');
end;

end.
[edit=Sharky][delphi-Tags] eingefügt. Mfg, Sharky[/edit]

Wolfgang Mix 9. Nov 2009 14:57

Re: Verschlüsselungstool
 
Hi,

erst einmal herzlich willkommen in der DP :dp:

Zitat:

hab was gefunden, jetzt muss ich nur noch herausfinden wie ich die zahl vom editfeld mit einbeziehen kann.
Hier ist der Quellcode:
Es wäre nett, wenn Du bei fremdem Code noch die Fundstelle (URL) mit angeben würdest.

Gruß

Wolfgang

Sherlock 9. Nov 2009 14:57

Re: Verschlüsselungstool
 
Na Prima, dann musst du ja eigentlich nur wissen, was das hier bedeutet:
Delphi-Quellcode:
normedKey := Ord(AKey) - Ord('A') +1;
Sherlock

DeddyH 9. Nov 2009 14:58

Re: Verschlüsselungstool
 
Und Finden ist gut, Nachvollziehen und Verstehen ist noch besser, dann kommst Du auch von ganz alleine auf die Lösung ;)

Wolfgang Mix 9. Nov 2009 15:05

Re: Verschlüsselungstool
 
Detlef hat hier geschrieben:

Zitat:

Das große A hat den Code 65, d.h. Ord('A') ergibt 65, umgekehrt ergibt Chr(65) das große A. Also musst Du nur aus der 65 die 68 machen, um auf D zu kommen.
In Ergänzung dazu:

Drucke Dir 'mal 'ne ASCII-Tabelle aus, dann wird vielleicht einiges klarer.

Gruß

Wolfgang

himitsu 9. Nov 2009 15:09

Re: Verschlüsselungstool
 
Delphi-Quellcode:
tmp := Ord(AText[i]) - Ord('A');        // Normalisieren
tmp := (26 + (tmp - normedKey)) mod 26; // Verschieben
Result[i] := Chr(tmp + Ord('A'));       // Denormalisieren
Normalisieren macht aus A=0, B=1 usw.
bei Denormalisieren ist es genau andersrum

und das in der Mitte würde ich mal etwas verständlicher übersetzen

Delphi-Quellcode:
tmp := Ord(AText[i]) - Ord('A');        // Normalisieren

tmp := tmp + normedKey;                 // Verschieben
if tmp >= 26 {Z} then tmp := tmp - 26;

Result[i] := Chr(tmp + Ord('A'));       // Denormalisieren

und wenn du jetzt aus AKey noch einen String machst und dort ebenfalls jeweils ein Zeichen für die Verschiebung nimmst, dann hast du schon deine Lösung
Code:
der zu verschlüsselnde Text.

Schlüssel
         Schlüssel
                  Schlüssel
                           S

pronoob1 9. Nov 2009 15:17

Re: Verschlüsselungstool
 
Hallo,

Ich hab so ein ähnliches Problem und dachte, dass es vielleicht reichen würde, wenn ich bei der Zeile:

normedKey := Ord(AKey) - Ord('A') + 1;

einfach

normedKey := Ord(AKey) - Ord('A') +StrToInt(edit1.text);

mache, aber da tritt dann ein Fehler auf, weil edit1 ein undefinierter Bezeichner ist ?!

Wolfgang Mix 9. Nov 2009 15:26

Re: Verschlüsselungstool
 
Dann versuche 'mal

Delphi-Quellcode:
normedKey := Ord(AKey) - Ord('A') +StrToInt(Form1.Edit1.Text);
Gruß

Wolfgang

DeddyH 9. Nov 2009 15:27

Re: Verschlüsselungstool
 
Innerhalb der Funktion ist Edit1 nicht bekannt. Du kannst also entweder eine Methode des Formulars daraus machen, einen zusätzlichen Parameter definieren oder einfach den Namen des Edits qualifizieren (Form1.Edit1 oder wie das bei Dir heißt).

pronoob1 9. Nov 2009 15:51

Re: Verschlüsselungstool
 
Danke für die schnelle Hilfe,
habs jetz so gemacht wie ihrs gesagt habt, nur noch davor "-2", weil
beim Verschlüsseln, der Buchstabe immer um 3 Stellen verschoben wurde, sieht also jetz so aus:

normedKey := Ord(AKey) - Ord('A') -2 +StrToInt(Form1.Edit1.Text);

lg

Tobi

Wolfgang Mix 9. Nov 2009 15:53

Re: Verschlüsselungstool
 
Geht doch :-D

pronoob1 9. Nov 2009 15:55

Re: Verschlüsselungstool
 
oft sinds ja dann nur so Kleinigkeiten und da ärger ich mich schon, aber naja was will man machen,
wie mein alter Lehrer immer sagte ("Das Leben ist hart und ungerecht") :mrgreen:

Sherlock 9. Nov 2009 16:02

Re: Verschlüsselungstool
 
Äh...Akey ist aber doch der "Index" um den verschoben werden soll. Wieso soll da noch irgendein Edit angeflanscht werden? Der Inhalt des Edits wird als AKey übergeben...oder hab ich was falsch verstanden?

:gruebel:

Edith sagt: Sinn von AKey, so wie ich iohn verstanden habe: Ersetze den Buchstaben "A" mit Buchstaben AKey und die weiteren entsprechend.

Sherlock

Wolfgang Mix 9. Nov 2009 16:04

Re: Verschlüsselungstool
 
Es ist noch kein Meister vom Himmel gefallen, war ja auch noch nie einer oben :-D
Eigentlich hilft nur Übung und 'ne freundliche Delphi-Gemeinde.
Ich glaube, hier bist Du richtig aufgehoben :!:

Gruß

Wolfgang

himitsu 9. Nov 2009 16:24

Re: Verschlüsselungstool
 
wenn dann eher
Delphi-Quellcode:
normedKey := StrToInt(Form1.Edit1.Text);
also wenn in dem edit eine Zahl steht


ansonsten für jedes zu verschlüsseönde Zeichen ein Zeichen aus dem Schlüssel nehmen
Delphi-Quellcode:
normedKey := Ord(Edit1.Text[(i - 1) mod Length(Edit1.Text) + 1]) - Ord('A');
Aber da das einzelne Funktionen sind, verwendet man da nicht direkt Edit1, sondern ändert die Parameter ... wie ich es oben schon erwähnte.

pronoob1 9. Nov 2009 16:27

Re: Verschlüsselungstool
 
Also es funktioniert auf jedenfall :wink:

Nero281084 9. Nov 2009 16:34

Re: Verschlüsselungstool
 
habe die lösung :
normedKey := Ord(AKey) - Ord('A') -2 + StrToInt(Form1.zahlen.Text);
und danke euch allen nochmals

Wolfgang Mix 9. Nov 2009 16:47

Re: Verschlüsselungstool
 
:-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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