![]() |
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: |
Re: Verschlüsselungstool
das klingt irgendwie nach einer Cäsar-Verschlüsselung
[msdn]Cäsar Verschlüsselung[/msdn] ![]() und es gibt auch einige Beispiele dazu im Forum zu finden [dp]cäsar[/dp] genauer gesag, ist das der Sonderfall ![]() ![]() ![]() |
Re: Verschlüsselungstool
Von verschlüsselung kann man bei
![]() Die Funktionen Ord und Chr sind deine Freunde um Characterzeichen zu verschieben. |
Re: Verschlüsselungstool
@Bernhard:
Zitat:
|
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. |
Re: Verschlüsselungstool
ja aber wie programmier ich das dann alles?
ich versteh da leider nur bahnhof(ankunft-abfahrt-information) :coder2: |
Re: Verschlüsselungstool
Zitat:
|
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:
[edit=Sharky][delphi-Tags] eingefügt. Mfg, Sharky[/edit]
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. |
Re: Verschlüsselungstool
Hi,
erst einmal herzlich willkommen in der DP :dp: Zitat:
Gruß Wolfgang |
Re: Verschlüsselungstool
Na Prima, dann musst du ja eigentlich nur wissen, was das hier bedeutet:
Delphi-Quellcode:
Sherlock
normedKey := Ord(AKey) - Ord('A') +1;
|
Re: Verschlüsselungstool
Und Finden ist gut, Nachvollziehen und Verstehen ist noch besser, dann kommst Du auch von ganz alleine auf die Lösung ;)
|
Re: Verschlüsselungstool
Detlef hat hier geschrieben:
Zitat:
Drucke Dir 'mal 'ne ASCII-Tabelle aus, dann wird vielleicht einiges klarer. Gruß Wolfgang |
Re: Verschlüsselungstool
Delphi-Quellcode:
Normalisieren macht aus A=0, B=1 usw.
tmp := Ord(AText[i]) - Ord('A'); // Normalisieren
tmp := (26 + (tmp - normedKey)) mod 26; // Verschieben Result[i] := Chr(tmp + Ord('A')); // Denormalisieren 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 |
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 ?! |
Re: Verschlüsselungstool
Dann versuche 'mal
Delphi-Quellcode:
Gruß
normedKey := Ord(AKey) - Ord('A') +StrToInt(Form1.Edit1.Text);
Wolfgang |
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).
|
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 |
Re: Verschlüsselungstool
Geht doch :-D
|
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: |
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 |
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 |
Re: Verschlüsselungstool
wenn dann eher
Delphi-Quellcode:
also wenn in dem edit eine Zahl steht
normedKey := StrToInt(Form1.Edit1.Text);
ansonsten für jedes zu verschlüsseönde Zeichen ein Zeichen aus dem Schlüssel nehmen
Delphi-Quellcode:
Aber da das einzelne Funktionen sind, verwendet man da nicht direkt Edit1, sondern ändert die Parameter ... wie ich es oben schon erwähnte.
normedKey := Ord(Edit1.Text[(i - 1) mod Length(Edit1.Text) + 1]) - Ord('A');
|
Re: Verschlüsselungstool
Also es funktioniert auf jedenfall :wink:
|
Re: Verschlüsselungstool
habe die lösung :
normedKey := Ord(AKey) - Ord('A') -2 + StrToInt(Form1.zahlen.Text); und danke euch allen nochmals |
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