Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Schnelle Verschlüsselung/Entschlüsselung von Strings??? (https://www.delphipraxis.net/167410-schnelle-verschluesselung-entschluesselung-von-strings.html)

romber 28. Mär 2012 15:16

Delphi-Version: 2010

Schnelle Verschlüsselung/Entschlüsselung von Strings???
 
Hallo!

Ich übertrage String-Daten (300 - 1.500 Zeichen) vom Server zum Client - bisher als Plain-Text. Die Übetragung ist absolut zeitkritisch. Nun bin ich auf der Suche nach einem schnellen einfachen Verschlüsselunsalgorithmus. Ich brauche keine besondere Sicherheit, mir ist nur wichtig, dass die Daten nicht Plain-Text übertragen werden und möglichst schnell ver- und entschlüsselt werden. Was könnt Ihr mir empfehlen?

Aphton 28. Mär 2012 15:21

AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
 
Xor Verschlüsselung (Bit Arithmetik)?!

shmia 28. Mär 2012 15:36

AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
 
Hier eine Funktion für die XOR-Verschlüsselung.
Das Ergebnis ist ein String mit binären Daten (auch Hex $0).
Ruft man die Funktion ein 2. Mal auf entsteht wieder der Orginaltext (was im Prinzip der Umkehrbarkeit von XOR liegt).

Für die Übertragung per TCP/IP muss dem Empfänger über ein Längenwort
mitgeteilt werden wie lange die verschlüsselten Daten sind.
Delphi-Quellcode:
function StringXorCrypt(const text, key:Ansistring):Ansistring;
var
   i, j, keylen : Integer;
begin
   SetLength(Result, length(text));
   j := 1;
   keylen := Length(key);
   for i := 1 to Length(text) do
   begin
      Result[i] := AnsiChr(ord(text[i]) xor ord(key[j]));
      Inc(j);
      if j > keylen then j := 1;
   end;
end;

Popov 28. Mär 2012 15:52

AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
 
Wenn es dir nur um einen Sichtschutz geht, wie wäre es mit ROT13 Verschlüsselung? Hierbei werden die Buchstaben des Alphabets um 13 Stellen rotiert. Diese Verschlüsselungsart ist alt, bekannt, aber nicht unbedingt sicher, denn sie kann zu Not wieder leicht dekodiert werden. Aber sie ist schnell und bietet einen guten Sichtschutz.

romber 28. Mär 2012 15:56

AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
 
Vielen Dank für die schnelle Reaktionen!

@shmia
Muss der Key genauso lang sein wie der zu verschlüsselnde String (so wie es bei XOR vorgeschrieben ist) oder kann ich ein beliebig langes Key verwenden?

romber 28. Mär 2012 15:59

AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
 
Zitat:

Zitat von Popov (Beitrag 1159092)
Wenn es dir nur um einen Sichtschutz geht, wie wäre es mit ROT13 Verschlüsselung? Hierbei werden die Buchstaben des Alphabets um 13 Stellen rotiert. Diese Verschlüsselungsart ist alt, bekannt, aber nicht unbedingt sicher, denn sie kann zu Not wieder leicht dekodiert werden. Aber sie ist schnell und bietet einen guten Sichtschutz.

Und wie sieht es dann aus mit den Sonderzeichen?

shmia 28. Mär 2012 16:02

AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
 
Zitat:

Zitat von romber (Beitrag 1159093)
Muss der Key genauso lang sein wie der zu verschlüsselnde String (so wie es bei XOR vorgeschrieben ist) oder kann ich ein beliebig langes Key verwenden?

Der Key darf beliebig lang sein. Sollte der Key kürzer als die Nutzdaten sein, wird er wieder beginnend mit dem 1. Zeichen verwendet.
Wenn der Key nur ein Zeichen lang ist, wird jedes Zeichen mit dem gleichen Wert "verXodert".

romber 28. Mär 2012 16:19

AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
 
Kann ich AnsiString durch PAnsiChar ersetzen? Sollte dadurch perfomanter werden...

shmia 28. Mär 2012 16:39

AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
 
Zitat:

Zitat von romber (Beitrag 1159104)
Kann ich AnsiString durch PAnsiChar ersetzen? Sollte dadurch perfomanter werden...

Na klar, allerdings würde ich nur innerhalb der Funktion mit Zeigern arbeiten.
Ich empfehle vor der Änderung einen kleinen Test schreiben.
Dann kannst du danach sicher sein, dass alles noch in Ordnung ist.
Delphi-Quellcode:
var
  text, key, ctext : Ansistring;
begin
  text := 'das ist der Text, der verschlüssel werden soll'#0#13#10'....1234567890';
  key := 'geheimer key';

  ctext := StringXorCrypt(text, key);

  if StringXorCrypt(ctext, key) <> text then
     raise Exception.Create('Funktion StringXorCrypt() ist defekt');
end;
PS: die Delphi Funktion ist um Welten schneller als der Datentransport über das Netzwerk.
Du fängst jetzt an zu optimieren ohne zu wissen ob das überhaupt notwendig ist.
Man nennt das "premature optimization". siehe auch: http://www.clean-code-developer.de/V...mierungen.ashx

romber 28. Mär 2012 16:47

AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
 
Delphi-Quellcode:
Result[i] := chr(ord(Text[i]) xor ord(Key[j]));


Vielleicht noch chr direkt durch AnsiChar ersetzen, ansonsten "Inkompatible Typen: 'AnsiChar' und 'Char'"


Zitat:

Zitat von shmia (Beitrag 1159110)
Du fängst jetzt an zu optimieren ohne zu wissen ob das überhaupt notwendig ist.

Stimmt, ich probiere es erstmal so aus. Im monent wird der String zwar verschlüsselt, aber nur teilweise wieder entschlüsselt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.
Seite 1 von 3  1 23      

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