Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi RC4 Textlänge (https://www.delphipraxis.net/83097-rc4-textlaenge.html)

Sierra 27. Dez 2006 13:35


RC4 Textlänge
 
Hi!
Ich habe mal die wunderbare RC4 Unit aus der Code-Library ausprobiert und bin auch voll und ganz zufrieden.
Es gibt nur ein Problem, nämlich wird bei einem längeren text zwar alles verschlüsselt, aber beim Entschlüsseln fehlen Textteile (hat das eventuell was mit Absätzen zu tun?).
Woran könnte das liegen?

Vielen Dank.

negaH 27. Dez 2006 14:25

Re: RC4 Textlänge
 
Nachdem man einen lesbaren Text verschlüsselt hat stehen im Resulat binäre Daten. Also auch das Zeichen #0 bzw. Byte = 0. Dieses Zeichen ist bei Strings aber der Null-Terminator, der einen lesbaren String beendet. Wenn du also das Resulat vom RC4 ständig neue Strings zuweist so schneidet die String-RTL diesen String ab. Suche mal nach der RCx Unit, dort wird der Resulat String in das HEX Format umgewandelt, damit kann das nicht mehr passieren.

Gruß Hagen

Sierra 27. Dez 2006 19:48

Re: RC4 Textlänge
 
Vielen Dank!
Ich habe zwar die Unit gefunden, die du meinst, aber welcher Teil ist jetzt unbedingt notwendig, um die hexadezimale Umwandlung zu vollziehen?

Vielen Dank.

Sierra 28. Dez 2006 14:22

Re: RC4 Textlänge
 
Ehrlich gesagt habe ich auch nicht die Lust, ein paar Stunden lang durch den Algorithmus zu steppen, um herauszufinden, wo das hingehört. :wink:
Deshalb wäre ich ganz dankbar, wenn mir jemand helfen könnte.

Vielen Dank.

Sierra 28. Dez 2006 19:06

Re: RC4 Textlänge
 
Hat denn niemand eine Antwort?

Sierra 30. Dez 2006 12:13

Re: RC4 Textlänge
 
Hi!
Es wäre echt nett, wenn mir jemand bei diesem Problem auf die Sprünge helfen könnte, da es sehr wichtig für mich ist.

Vielen Dank.

gammatester 30. Dez 2006 19:53

Re: RC4 Textlänge
 
Zitat:

Zitat von Sierra
Es wäre echt nett, wenn mir jemand bei diesem Problem auf die Sprünge helfen könnte, da es sehr wichtig für mich ist.

Wenn "es sehr wichtig" für Dich ist, kann ich Deine andere Aussage nicht ganz verstehen und andere Leute wohl auch nicht: "Ehrlich gesagt habe ich auch nicht die Lust, ein paar Stunden lang durch den Algorithmus zu steppen, um herauszufinden, wo das hingehört."

Fakt ist, wie negaH schreibt, daß in der Regel im verschlüsselten Text #0-Zeichen vorkommen:

Zitat:

Also auch das Zeichen #0 bzw. Byte = 0. Dieses Zeichen ist bei Strings aber der Null-Terminator, der einen lesbaren String beendet. Wenn du also das Resultat vom RC4 ständig neue Strings zuweist so schneidet die String-RTL diesen String ab.
Die zweite Aussage ist allerdings schlichtweg falsch. #0 ist ein völlig legales Zeichen in Strings und wird von der RTL auch so behandelt. Nur beim pchar-Typ ist es das Endezeichen. Einige VCL-Routine sind buggy mit #0 in Strings (weil sie über pchar gehen).

Wir wäre es, wenn Du die ganze Sache (fast) vom Anfang beginnst: Das einfachste ist doch, ohne zusätzliche Hex-Umwandlung den verschlüsselten Memoryblock in eine (binäre) Datei zuschreiben.

Wolfgang

Sierra 31. Dez 2006 09:44

Re: RC4 Textlänge
 
Das ich keine Lust habe durch den Algorithmus zu steppen liegt allein an dessen Länge.
Denn man muss sich vorstellen, dass, bis man einen #0 Wert gefunden hat, schon einige Zeichen bearbeitet werden müssen.
Und das nun von 0 bis 255 und wieder zurück.
Da sitzt man ganz schön lange dran.
Jetzt aber zu deinem anderen Tipp.
Wie genau funktioniert das?
Kannst du mir genauere Angaben machen?

Vielen Dank.

gammatester 31. Dez 2006 14:32

Re: RC4 Textlänge
 
Zitat:

Zitat von Sierra
Das ich keine Lust habe durch den Algorithmus zu steppen liegt allein an dessen Länge. Denn man muss sich vorstellen, dass, bis man einen #0 Wert gefunden hat, schon einige Zeichen bearbeitet werden müssen. Und das nun von 0 bis 255 und wieder zurück. Da sitzt man ganz schön lange dran.

Aber nur wenn man nicht weiß, was man eigentlich tut. Verschlüssel doch einfach einen Block von lauter #0. Dann sollten alle entschlüsselten Bytes doch wieder #0 sein, oder an Deiner Implementation ist was grundsätzlich falsch.

Zitat:

Jetzt aber zu deinem anderen Tipp. Wie genau funktioniert das? Kannst du mir genauere Angaben machen?
Du weißt, was eine Datei ist oder nicht? Wenn nicht, vergiß am besten die ganze Sache. Ansonsten hier eine Skizze:

Verschlüsseln (setzt Deine realen Proceduren ein)

rc4_int(key, keylen);
rc4_encrypt(plaintext, ciphertext, len);
assign(f,'name.rc4');
rewrite(f,1);
blockwrite(f,ciphertext,len);
close(f);

Entschlüsseln:

rc4_int(key, keylen);
assign(f,'name.rc4');
reset(f,1);
blockread(f,ciphertext,len);
close(f);
rc4_decrypt(ciphertext, plaintext, len);

Sierra 1. Jan 2007 19:31

Re: RC4 Textlänge
 
Du meintest bestimmt "AssignFile" und "CloseFile", oder?
Wenn ja, dann funktioniert es leider so nicht.
Auch hier werden die #0 Bytes berücksichtigt und kürzen somit leider immer noch den Text.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.
Seite 1 von 5  1 23     Letzte »    

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