Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   XOR Verschlüsselung ANFÄNGER (https://www.delphipraxis.net/70655-xor-verschluesselung-anfaenger.html)

schlitzer81 2. Jun 2006 10:31


XOR Verschlüsselung ANFÄNGER
 
Hallo.

Irgendwie krieg ich das mit dem XOR nicht so gebacken.
Will eigentlich nur ne ganz einfache Aufgabe lösen...

Diesen Text: abcdefgh
mit diesem Key: 1ABCDE
Ergebnis: P#!"!#V

Hab schon alles mögliche probiert, bekomme aber
immer andere Ergebnisse.

Bin für jeden Ansatz dankbar.
SORRY BITTE VERSCHIEBEN

[edit=MrSpock]Wie gewünscht verschoben. Mfg, MrSpock[/edit]

himitsu 2. Jun 2006 11:03

Re: XOR Verschlüsselung ANFÄNGER
 
Einfach jedes Zeichen in eine Zahl (Byte, Integer...) umwandeln, diese per XOR verknüpfen und dann zurück in ein Zeichen (Char, AnsiChar...)
Delphi-Quellcode:
For i := 1 to Length(Text) do Begin
  B1 := Byte(Text[i]);
  B2 := Byte(Key[i]);
  Bx := B1 xor B2;
  Text[i] := Char(Bx);
End;
Zusammen isses natürlich kürzer:
Delphi-Quellcode:
For i := 1 to Length(Text) do
  Text[i] := Char(Byte(Text[i]) or Byte(Key[i]));

// oder

For i := 1 to Length(Text) do
  Text[i] := Chr(Ord(Text[i]) or Ord(Key[i]));
Das obere war aber nur, wenn Key gleich lang, oder länger als Text ist.
bei 'nem kürzerem Key muß du natürlich die Position des zu lesenden Zeichens im Key anpassen
Delphi-Quellcode:
For i := 1 to Length(Text) do Begin
  i2 := (i - 1) mod Length(Text2) + 1;
  i2 := (i - 1) mod Length(Text2) + 1;
  B1 := Byte(Text[i]);
  B2 := Byte(Key[i2]);
  Bx := B1 xor B2;
  Text[i] := Char(Bx);
End;
Delphi-Quellcode:
For i := 1 to Length(Text1) do
  Text1[i] := Char(Byte(Text1[i]) or Byte(Text2[(i - 1) mod Length(Text2) + 1]));
so geht es zwar auch, aber dann verschlüsselt der Text[1] mit Key[2], Text[2] mit Key[3] und so weiter ... also alles um ein Zeichen verschoben (aber vielleicht könnte das ja auch so gewollt sein ... funktionieren würde es jedenfalls auch)
Zitat:

i2 := i mod Length(Text2) + 1;

PS: Beim XOR ist die Entschlüsselung genauso wie der Verschlüsselung, also für Rückgängig einfach nochmal "verschlüsseln" ^^

DP-Maintenance 2. Jun 2006 14:17

DP-Maintenance
 
Dieses Thema wurde von "MrSpock" von "Klatsch und Tratsch" nach "Programmieren allgemein" verschoben.
Auf Wunsch des Erstellers verschoben.

DGL-luke 2. Jun 2006 14:38

Re: XOR Verschlüsselung ANFÄNGER
 
Es kann übrigens Probleme bei der Darstellung geben, da in der API #0 als "String-ende" gilt. IN einem memo z.B. wird dann nur bis zum ersten vorkommenden #0 angezeigt. Zur Darstellung und Übertragung als String also am besten ein Escaping entwickeln. Beispiel: #1 = #1#1; #0=#1#2.

Ansonsten ist eine Reduzierung des Zahlenbereichs möglich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz