![]() |
Verschlüsselung mit Monoalphabetischer Substitution
Hallo,
ich habe mir eine Funktion geschrieben, um einen String mit Hilfe der ![]() Das ist meine Funktion zum verschlüsseln:
Delphi-Quellcode:
function encode(text: AnsiString;const UnformatCharKey: Char):AnsiString;
{text = zu codierender Text; key = Schlüssel zur Alphabetsverschiebung[A..Z]} {Groß-/Kleinschreibung ist beim Schlüssel egal} {Ergebnis der Funktion ist der verschlüsselte Text} {Zeichencode: Ansi} var i: Integer; {Laufindex für die Position des aktuell bearbeiteten Chars in "text"} DecodedChar: Integer; {Nicht-Codiertes Zeichen aus "text" in ANSI-Ordinalzahlen} EncodedChar: Integer; {Codiertes Zeichen aus "text" in ANSI-Ordinalzahlen} UnformatetOrdKey: Integer; {Ordinalwert des nicht umgerechneten Keys in ANSI-Codierung} SpecialCharacters1: set of 1..64; {Menge der Sonderzeichen aus der ANSI-Tabelle in Ordinalzahlen} SpecialCharacters2: set of 91..96; {-''-} SpecialCharacters3: set of 123..255; {-''-} SmallLetters: set of 97..122; {Menge der Kleinbuchstaben aus der ANSI-Tabelle in Ordinalzahlen} CapitalLetters: set of 65..90; {Menge der Großbuchstaben aus der ANSI-Tabelle in Ordinalzahlen} OrdinalKey: Integer; {Ordinalwert des Keys (a=0, b=1, usw.)} TemporaryNumber: Integer; {Temporär benutzte Zahl} begin {Denn Key in einen Großbuchstaben umrechnen, wenn er ein Kleinbuchstabe ist und dann als Ordinalwert ausgeben} if ord(UnformatCharKey) in SmallLetters then UnformatetOrdKey := ord(upcase(UnformatCharKey)) else UnformatetOrdKey := ord(UnformatCharKey); {Umlaute ersetzen} StringReplace(text,'ä','ae',[rfReplaceAll]); StringReplace(text,'ö','oe',[rfReplaceAll]); StringReplace(text,'ü','ue',[rfReplaceAll]); StringReplace(text,'Ä','Ae',[rfReplaceAll]); StringReplace(text,'Ö','Oe',[rfReplaceAll]); StringReplace(text,'Ü','Ue',[rfReplaceAll]); StringReplace(text,'ß','s',[rfReplaceAll]); EncodedChar := 0; i := 1; repeat DecodedChar := ord(text[i]); if DecodedChar in SpecialCharacters1 then EncodedChar := DecodedChar; if DecodedChar in SpecialCharacters2 then EncodedChar := DecodedChar; if DecodedChar in SpecialCharacters3 then EncodedChar := DecodedChar; if DecodedChar in SmallLetters then begin OrdinalKey := UnformatetOrdKey-65; EncodedChar := DecodedChar+OrdinalKey; if EncodedChar>122 then begin TemporaryNumber := EncodedChar-122; EncodedChar := 96+TemporaryNumber; end; end; if DecodedChar in CapitalLetters then begin OrdinalKey := UnformatetOrdKey-65; EncodedChar := DecodedChar+OrdinalKey; if EncodedChar>90 then begin TemporaryNumber := EncodedChar-90; EncodedChar := 64+TemporaryNumber; end; end; result[i] := chr(EncodedChar); i := i+1; until i=(length(text))+1; end; Wenn ich diese jedoch in ein einfaches Programm integriere gibt sie kein Ergebnis aus. Ich kann mir nicht erklären wieso :?: :gruebel: , vielleicht weiß es ja einer von euch :roll: Gruß engel90 |
Re: Verschlüsselung mit Monoalphabetischer Substitution
Hallo :hi:
Delphi-Quellcode:
Sollte IMHO heißen:
result[i] := chr(EncodedChar);
Delphi-Quellcode:
Schreiben über das Ende heines Strings hinaus, ist nicht ganz so toll...
result := result + chr(EncodedChar);
mfg Christian |
Re: Verschlüsselung mit Monoalphabetischer Substitution
danke
natürlich logisch das man das dazuaddieren muss :wall: die Funktion gibt aber leider immer noch kein Wert aus :gruebel: Ich glaub ich werd die Funktion nochmal komplett neuschreiben, aber danke für deine Hilfe :thumb: Gruß engel90 |
Re: Verschlüsselung mit Monoalphabetischer Substitution
Was sagt denn der Debugger?
mfg Christian |
Re: Verschlüsselung mit Monoalphabetischer Substitution
Hallo Engel90,
StringReplace() ist eine Funktion!
Delphi-Quellcode:
Grüße vom marabu
// ...
text := StringReplace(text, 'ß', 's', [rfReplaceAll]); SetLength(Result, Length(text)); for i := 1 to Length(text) do begin { ... } Result[i] := ... end; |
Re: Verschlüsselung mit Monoalphabetischer Substitution
Zitat:
|
Re: Verschlüsselung mit Monoalphabetischer Substitution
Zitat:
![]() mfg Christian |
Re: Verschlüsselung mit Monoalphabetischer Substitution
Hallo Engel90,
schau Dir doch nochmal diesen Bereich an:
Delphi-Quellcode:
und vergleiche das mal mit dem tatsächlichen Inhalt der Mengen-Variablen während das Prog läuft (Debugger).
SpecialCharacters1: set of 1..64; {Menge der Sonderzeichen aus der ANSI-Tabelle in Ordinalzahlen}
SpecialCharacters2: set of 91..96; {-''-} SpecialCharacters3: set of 123..255; {-''-} SmallLetters: set of 97..122; {Menge der Kleinbuchstaben aus der ANSI-Tabelle in Ordinalzahlen} CapitalLetters: set of 65..90; {Menge der Großbuchstaben aus der ANSI-Tabelle in Ordinalzahlen} |
Re: Verschlüsselung mit Monoalphabetischer Substitution
Guten Morgen,
habe mal dieses geändert:
Delphi-Quellcode:
Warum es mit den sets nicht läuft keine Ahnung.
if (DecodedChar >= 97) and (DecodedChar <= 122)then
begin OrdinalKey := UnformatetOrdKey-65; EncodedChar := DecodedChar+OrdinalKey; if EncodedChar>122 then begin TemporaryNumber := EncodedChar-122; EncodedChar := 96+TemporaryNumber; end; end; if (DecodedChar >= 65) and (DecodedChar <=90) then begin OrdinalKey := UnformatetOrdKey-65; EncodedChar := DecodedChar+OrdinalKey; if EncodedChar>90 then begin TemporaryNumber := EncodedChar-90; EncodedChar := 64+TemporaryNumber; end; end; Grüße Klaus |
Re: Verschlüsselung mit Monoalphabetischer Substitution
Zitat:
Ähm... vielleicht, weil die sets leer sind? set <> Unterbereichstyp... Wie wärs mit sowas:
Delphi-Quellcode:
BTW:
// unterbereichstyp:
TLowerCaseChar = 'a'..'z'; // nicht nötig. Nur zur Verdeutlichung, was vielelicht verwirrend war... // set: LowerCaseChars: set of TLowerChar = ['a'..'z']; - Statt mit den Integer-Repräsentationen kann man auch direkt mit Chars rechnen:
Delphi-Quellcode:
- Das Partizip Perfekt(Partizip II) bzw. past participle hat im Englischen die Endung -ed, nicht -et
'a' +3
- Kleinbuchstabe heißt nicht Small Letter/Char, sondern Lower Case Letter/Char... - Es gibt die Funktionen (Ansi)Upper/LowerCase... - ... mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 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