Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi RC4 Implementierung - Problem mit längeren Texten (https://www.delphipraxis.net/135488-rc4-implementierung-problem-mit-laengeren-texten.html)

qwertz543221 11. Jun 2009 19:05

Re: RC4 Implementierung - Problem mit längeren Texten
 
vielen dank, das hat geholfen.


Jetzt klappt das ganze wie gewünscht. (abgesehen vom base64-längen-nebeneffekt)

himitsu 11. Jun 2009 19:42

Re: RC4 Implementierung - Problem mit längeren Texten
 
Nja, Base64 ist immerhin noch kürzer als Hexadezimal :angel2:

Base64 nutzt effektiv nur 5 Bit pro Zeichen, in ganzen Bit könnte man locker 7 verwenden und alles um 32 hochsetzen ... quasi Base128

Effektiv kann man aber in Ansi 256-32 Werte pro Zeichen codieren
und innerhalb des ASCII-Bereichs 128-32 Werte (da es dort nur 7 Bit gibt)
Bei einer größeren Packungsdichte würden dann aber die Berechnungen etwas aufwändiger und die zusammenhängenden Blöcke größer.
> Base64 = 3 Byte in 4 Zeichen = 33% größer

Aphton 11. Jun 2009 20:15

Re: RC4 Implementierung - Problem mit längeren Texten
 
Delphi-Quellcode:
rc4init(memo1.Text);
text:=memo2.Text;
textneu:=rc4encdec(text);
memo2.Text:=textneu;
Wie schon himitsu bereit erwähnt hat, wird ein String, das #0 enthält, nicht ganz angezeit (0 wird als Nullterminierung interpretiert)
Kannst gern ausprobieren, falls du es nicht glaubst / verstehst:

Delphi-Quellcode:
var x:String;
x := 'Test'#0'Dies wird nicht gezeigt';
Ich würd das Problem einfach so lösen, dass ich mir das ganze als Hex anzeigen lasse:

Delphi-Quellcode:
function StrToHex(Str: String): String;
var
  i: Integer;
begin
  for i := 1 to Length( Str ) do
  begin
    Result := Format( '%s $%x', [Result, ORD( Str[i] ) ] );
    if i mod 16 = 0 then
      Result := Result + #13#10;
  end;
end;
oder, fall ich mal unbedingt den Text nicht durch das Kopfrechnen (Umrechnen von Hex auf Dez. und Ascii Characterdarstellung) erschätzen will, mach ich folgendes -> ich filter einfach alles, was nicht anzeigbar ist:

Delphi-Quellcode:
function FilterBadChars(Str: String; const FilterChar: Char = '.'): String;
var
  i: Integer;
begin
  Result := Str;
  for i := 1 to Length(Str) do
    if ORD(Str[i]) in [0..32, 130..255] then
      Result[i] := FilterChar;
end;
MfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 Uhr.
Seite 2 von 2     12   

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