![]() |
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] |
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:
Zusammen isses natürlich kürzer:
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;
Delphi-Quellcode:
Das obere war aber nur, wenn Key gleich lang, oder länger als Text ist.
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])); 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:
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)
For i := 1 to Length(Text1) do
Text1[i] := Char(Byte(Text1[i]) or Byte(Text2[(i - 1) mod Length(Text2) + 1])); Zitat:
PS: Beim XOR ist die Entschlüsselung genauso wie der Verschlüsselung, also für Rückgängig einfach nochmal "verschlüsseln" ^^ |
DP-Maintenance
Dieses Thema wurde von "MrSpock" von "Klatsch und Tratsch" nach "Programmieren allgemein" verschoben.
Auf Wunsch des Erstellers verschoben. |
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 12:56 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-2025 by Thomas Breitkreuz