Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Ganz leichte Verschlüsselung


Big_Boss - Mo 25.12.06 20:05
Titel: Ganz leichte Verschlüsselung
Hallo,

Ich möchte mal ein ganz leichtes Text-verschlüsslungs-Programm machen, welches alle "A" mit "B" ersetz "B"-->"C"...
aber wenn ich alle "A" durch "B"ersetze, wird im nächsten Schritt schon wieder das "B" durch "C" ersetz.
Hier mein Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
...
  s:=form3.Edit2.Text;
  S:=stringreplace(s,'A','B',[rfIgnoreCase]);
  S:=stringreplace(s,'B','C',[rfIgnoreCase]);
...
    form3.edit3.text:=s;
...


soll ich es vllt nicht mir stringreplace machen oder gibt es da einen Trick?

MfG Big_Boss


Moderiert von user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 25.12.2006 um 20:10


BenBE - Mo 25.12.06 20:10

Du musst die Ersetzung in einem Schritt machen, indem Du den String Zeichenweise durchgehst und dann z.B. Neu := Chr(Ord(Alt) + 1); rechnest und dieses Zeichen an die aktuelle Stelle im String schreibst ...


Jakob Schöttl - Mo 25.12.06 20:12

Früher, als noch Buchstabenweiße (nicht Byteweise) verschlüsselt wurde, wurde (bin mir nicht mehr 100 % sicher, obs nicht anders herum war) der Klartext nur mit kleinen buchstaben und der Geheimtext nur mit großen buchstaben dargestellt. Du könntest also alle kleinen 'a' im Klartext durch große 'B' im Geheimtext ersetzen...


Big_Boss - Mo 25.12.06 20:21

Danke für die schnelle antwort.
Das mit den groß und klein leutet mir ein, aber das ist dann ganz schön schwer zu lesen.
" Neu := Chr(Ord(Alt) + 1);"
Neu ist der String oder, was ist aber Alt?


BenBE - Mo 25.12.06 20:26

user profile iconBig_Boss hat folgendes geschrieben:
Danke für die schnelle antwort.
Das mit den groß und klein leutet mir ein, aber das ist dann ganz schön schwer zu lesen.
" Neu := Chr(Ord(Alt) + 1);"
Neu ist der String oder, was ist aber Alt?


Sagen wir, du hast in A (var A: String;) deinen Text, den Du verschlüsseln willst. Ferner nehmen wir an, Du hast in X (var X: Integer;) eine Zählvariable, mit der Du durch den String gehst ...

Alt (var Alt: Char;) und Neu (var Neu: Char;) sind nun zwei Variablen, die wie folgt zugewiesen werden:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
For X := 1 To Length(A) do
Begin
    Alt := A[X];
    Neu := Chr(Ord(Alt) + 1);
    A[X] := Neu;
end;


You see?


Big_Boss - Mo 25.12.06 20:56

VIELEN DANK!!!!! Funktioniert prima.


delfiphan - Mo 25.12.06 22:31
Titel: Re: Ganz leichte Verschlüsselung
user profile iconBig_Boss hat folgendes geschrieben:
S:=stringreplace(s,'A','B',[rfIgnoreCase]);
S:=stringreplace(s,'B','C',[rfIgnoreCase]);

Kleine Bemerkung: Wenn du keine zyklische "Ersetzungskette" hast musst du einfach die richtige Reihenfolge wählen, dann gibt's keine Probleme. Aber punkto Effizienz ist klar, dass die StringReplace-Methode sowieso keine gute Idee ist.