Einzelnen Beitrag anzeigen

Benutzerbild von engel90
engel90

Registriert seit: 15. Jan 2007
Ort: Jena
38 Beiträge
 
Delphi 7 Personal
 
#1

Verschlüsselung mit Monoalphabetischer Substitution

  Alt 23. Feb 2007, 23:50
Hallo,
ich habe mir eine Funktion geschrieben, um einen String mit Hilfe der Monoalphabetisches Substitution zu verschlüsseln. (Das Verfahren wird auch Caesar genannt glaub ich)

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 , vielleicht weiß es ja einer von euch

Gruß
engel90
  Mit Zitat antworten Zitat