Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem bei XOR-Verschlüßelung (https://www.delphipraxis.net/42039-problem-bei-xor-verschluesselung.html)

TheAn00bis 12. Mär 2005 14:20


Problem bei XOR-Verschlüßelung
 
Ich habe gerade eben follgende XOR-Ver- und Entschlüßelung geschrieben:
Delphi-Quellcode:
          function VerschlXor(text, key:string):string;
          var i, i2: integer;
          begin
               i2:=0;
                     for i:=0 to length(text) do begin
                     text[i]:=chr((ord(text[i]) xor ord(key[i2])));
                     if i2=length(key) then i2:=0 else inc(i2);
                     end;
               result:=text;
          end;
Nun habe ich follgendes Problem: Wenn ein Buchstabe im Text mit dem selben Buchstaben verschlüßelt wird, dann wird nicht nur der Buchstabe nicht angezeigt, sondern auch keiner der folgenden Buchstaben.

Bsp: Schlüßel ist B, text ist "hallo Baum", dann verschlüßel (ins Memo) und entschlüßel ich den Text und der Text kommt raus: "hallo " (alles ab dem B ist weg). Hat jemand eine Ahnung woran das liegt?

Intern scheint das ganze allerdings immer zu klappen, also wenn ich den verschlüßelten Text in eine Variable schreibe und auch zum Entschlüßeln aus dieser Variablen lese. Also muss
chr((ord('B') xor ord('B'))) ein Zeichen ausgeben das alle dahinterkommenden verschlingt!?

Christian Seehase 12. Mär 2005 14:30

Re: Problem bei XOR-Verschlüßelung
 
Moin TheAn00bis,

wenn Du mit XOR zwei gleiche Werte verknüpfts, kommt 0 dabei heraus, und ein Memo zeigt nichts an, was ab der 0 kommt, da dies auch als Ende eines Strings gewertet wird.

TheAn00bis 12. Mär 2005 14:44

Re: Problem bei XOR-Verschlüßelung
 
Danke! Hat jemand eine Ahnung, wie man das Problem beheben kann, so dass trotzdem der richtige Text rauskommt? Natürlich könnte ich die Zahlen rauslassen, aber das wäre ja mist.

Einige Programme (z.B. CryptTool) machen das ja auch richtig...

Edit: Ich sehe gerade das Programm zeigt auch nur die Verschlüßelten Hexadezimalwerte an, dann werde ich das wohl auch so machen.

Binärbaum 12. Mär 2005 18:24

Re: Problem bei XOR-Verschlüßelung
 
Zitat:

Zitat von Christian Seehase
Moin TheAn00bis,

wenn Du mit XOR zwei gleiche Werte verknüpfts, kommt 0 dabei heraus, und ein Memo zeigt nichts an, was ab der 0 kommt, da dies auch als Ende eines Strings gewertet wird.

Das könnte man verhindern, indem man im Schlüssel nur Werte zulässt, die nicht oder nur sehr unwahrscheinlich im Text vorkommen, z.B. Steuerzeichen (d.h. Ordinalwert kleiner als 32).

MfG
Binärbaum

malo 12. Mär 2005 18:38

Re: Problem bei XOR-Verschlüßelung
 
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von Christian Seehase
Moin TheAn00bis,

wenn Du mit XOR zwei gleiche Werte verknüpfts, kommt 0 dabei heraus, und ein Memo zeigt nichts an, was ab der 0 kommt, da dies auch als Ende eines Strings gewertet wird.

Das könnte man verhindern, indem man im Schlüssel nur Werte zulässt, die nicht oder nur sehr unwahrscheinlich im Text vorkommen, z.B. Steuerzeichen (d.h. Ordinalwert kleiner als 32).

MfG
Binärbaum

Und wie willst du die als Parameter (der Parameter muss ja (in diesem Beispiel) als String übergeben werden) übergeben?


Man könnte ja zuerst mit einer For-Schleife den String durchgehen und prüfen, ob "key" einem der Zeichen im String entspricht. Wenn ja, dann wird "key" um 1 erhöht und es wird weiterprobiert. Irgendwann wird sich schon ein Zeichen finden lassen, das nicht im String vorkommt :zwinker:

Binärbaum 12. Mär 2005 19:03

Re: Problem bei XOR-Verschlüßelung
 
Zitat:

Zitat von malo
Man könnte ja zuerst mit einer For-Schleife den String durchgehen und prüfen, ob "key" einem der Zeichen im String entspricht. Wenn ja, dann wird "key" um 1 erhöht und es wird weiterprobiert. Irgendwann wird sich schon ein Zeichen finden lassen, das nicht im String vorkommt :zwinker:

Wenn nun aber der String key ein Teil des Textes ist, d.h. jedes in key vorhandene Zeichen kommt auch im Text vor, dann geht das schlecht.

Außerdem wäre es IMHO besser, wenn key kein String sondern eher ein array of byte wäre, da ja letztlich nur die Ordinalwerte der Zeichen in key interessieren und nicht die Zeichen an sich. Dann könnte man auch solche Werte besser übergeben, die mit einem String nur schlecht zu realisieren sind.

MfG
Binärbaum

malo 12. Mär 2005 19:05

Re: Problem bei XOR-Verschlüßelung
 
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von malo
Man könnte ja zuerst mit einer For-Schleife den String durchgehen und prüfen, ob "key" einem der Zeichen im String entspricht. Wenn ja, dann wird "key" um 1 erhöht und es wird weiterprobiert. Irgendwann wird sich schon ein Zeichen finden lassen, das nicht im String vorkommt :zwinker:

Wenn nun aber der String key ein Teil des Textes ist, d.h. jedes in key vorhandene Zeichen kommt auch im Text vor, dann geht das schlecht.

Nein, ich meine das erste Zeichen von "key" soll um 1 erhöht werden (also der Ordinalwert). Dieses ist ja der Wert, um den verschlüsselt werden soll ;)

Binärbaum 12. Mär 2005 19:10

Re: Problem bei XOR-Verschlüßelung
 
Zitat:

Zitat von malo
Nein, ich meine das erste Zeichen von "key" soll um 1 erhöht werden (also der Ordinalwert). Dieses ist ja der Wert, um den verschlüsselt werden soll ;)

Ach so, dass ist was anderes. Aber was wäre z.B. wenn alle möglichen Zeichen mindestens einmal im Text vorkommen? Dann sieht es immer noch (oder schon wieder?) schlecht aus. Also käme man zwangsweise durch die Verschlüsselung zu einer 0, wodurch der verschlüsselte Text ab dieser Stelle nicht mehr angezeigt werden kann.
Deshalb müsste man (wie schon bereits erwähnt) von Strings auf die reinen Zahlenwerte ausweichen und hätte dann auch keine Probleme mit derern Darstellung.

MfG
Binärbaum

malo 12. Mär 2005 19:17

Re: Problem bei XOR-Verschlüßelung
 
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von malo
Nein, ich meine das erste Zeichen von "key" soll um 1 erhöht werden (also der Ordinalwert). Dieses ist ja der Wert, um den verschlüsselt werden soll ;)

Ach so, dass ist was anderes. Aber was wäre z.B. wenn alle möglichen Zeichen mindestens einmal im Text vorkommen? Dann sieht es immer noch (oder schon wieder?) schlecht aus. Also käme man zwangsweise durch die Verschlüsselung zu einer 0, wodurch der verschlüsselte Text ab dieser Stelle nicht mehr angezeigt werden kann.

Man geht da ja die ASCII-Codes durch. Man müsste dann nur prüfen, ob der ASCII-Code 0 ist (um 0 natürlich nicht verschlüsseln). Wenn ASCII-Code Nr. 255 NOCHMAL erhöht wird, kommt man ja bei 0 aus. Danach wird einfach weitergeprüft, und man landet wohl beim ersten Steuerzeichen (und Steuerzeichen sind ja bekanntlich recht schwierig als String wiederzugeben) ;)

idontwantaname 12. Mär 2005 20:44

Re: Problem bei XOR-Verschlüßelung
 
ich würde den string einfach in hexadezimalen werten der einzelnen buchstaben anzeigen lassen, aber in einer datei normal abspeichern (file of byte)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 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