![]() |
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? |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Xor Verschlüsselung (Bit Arithmetik)?!
|
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; |
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.
|
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? |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Zitat:
|
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Zitat:
Wenn der Key nur ein Zeichen lang ist, wird jedes Zeichen mit dem gleichen Wert "verXodert". |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Kann ich AnsiString durch PAnsiChar ersetzen? Sollte dadurch perfomanter werden...
|
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Zitat:
Ich empfehle vor der Änderung einen kleinen Test schreiben. Dann kannst du danach sicher sein, dass alles noch in Ordnung ist.
Delphi-Quellcode:
PS: die Delphi Funktion ist um Welten schneller als der Datentransport über das Netzwerk.
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; Du fängst jetzt an zu optimieren ohne zu wissen ob das überhaupt notwendig ist. Man nennt das "premature optimization". siehe auch: ![]() |
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:
|
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Zitat:
![]() Das "besondere" an ROT13 ist, dass es nur eine Prozedur für Ver- und Entschlüsselung gibt. Eigentlich gilt das nur für das reine 26 Zeichen Alphabet. Der Gag dabei ist, dass ein mal rotieren den Text verschlüsselt, noch mal rotieren wieder entschlüsselt. Wenn du noch weitere Zeichen Verschlüsseln willst, mußt du eine Anwandlung von ROT13 schreiben. |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Ich würde noch empfehlen den String vorher in allgemeingültiges und stabiles Format zu konvertieren.
UTF-8 bietet sich da besonders an. Und erst danach zu verschlüsseln. Somit kann man die Funktion für ANSI und Unicode verwenden und für beide Codierungen wäre alles sogar kompatibel untereinander. Ansonsten muß man sich eben auf einen Typen festlegen (meistens AnsiString), aber zukunftssicher wäre es dann nicht unbedingt. |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Wenn man schon etwas Arbeit hereinsteckt: warum nicht RC4?
Das eigendliche Codieren sollte damit schnell genug sein und man hat ein erprobtes und bekanntes Verfahrenen. |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
|
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Zitat:
Wenn du TCP nutzt, dann nutz doch einfach SSL. Das ist fertig und "sicher". |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Zitat:
Zitat:
|
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Also ich würde mich BUG und generic hier anschließen. Wenn du hier wirklich etwas verschlüsseln willst, dann sollte das auch einigermaßen sicher sein. Sonst kannst du dir die Arbeit auch sparen. XOR und ROT13 sind keine sinnvollen Techniken hier. Du lernst und bekommst mehr, wenn du richtig verschlüsselst. Je nach dem, welche Komponenten du bisher nutzt (mit Indy sollte das einfach sein), bist du mit SSL schnell fertig und auf der absolut sicheren Seite.
Was die Geschwindigkeit angeht: Ich glaube nicht dass die Verschlüsselung hier der Flaschenhals ist. Du kennst vielleicht SSH, ein verschlüsseltes Protokoll zur Administration eines Servers. Dazu gibt es auch SSHFS, damit kann man auf die Dateien des Servers zugreifen. Außerdem unterstützt SSH verschlüsselte Tunnel, quasi Proxy. Das alles habe ich schon sehr oft verwendet, zum Teil in Gigabit Netzwerken, und konnte keine Geschwindigkeitsverluste erkennen. Liebe Grüße, Valentin |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Ich meine immer: Warum das Rad neu erfinden, wenn man gleich los fahren kann.
|
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Zitat:
![]() ![]() |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
@Valle
Zitat:
- Hauptziel: keine Plain-Text-Übertragung - Effizienz Also warum mit Raketen auf Spatzen schießen? |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Wieso auf Spatzen schießen, die schon im Käfig sitzen? SSL ist ja schon fertig.
Und bezüglich "Kanone": RC4 hast du genauso schnell implementiert wie die ganzen "billigen" Lösungen. |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Ne, damit will ich aber nicht verneinen, dass es einfach implementierbar ist.
Eine Xor Verschlüsselung alleine - ohne die Substitutions Box (und deren Handhabung/Overhead -> RC4) ist einfach schneller implementiert! =P |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Zitat:
Vielleicht verrätst du, romber, uns, um was es konkret geht? :) Aber ich will hier nicht darüber streiten. Meiner Meinung nach macht man es entweder ganz oder gar nicht. Aber es ist natürlich die Entscheidung des TEs. Liebe Grüße, Valentin |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Jo, jedem das seine...
Zitat:
Gegen den 0815 Programmierer / User ist das schon eine effektive Methode, gegen einen Kryptoanalytiker nicht! Ich interpretiere das ganze so, dass er die Daten eigentlich nur unleserlich machen will und mehr nicht! |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Zitat:
Zurück zu SSL. Das wäre eigentlich die einfachste und zugleich auch noch eine der sichersten Varianten. Ist SSL schnell genug? Wer hat Erfahrungen damit bei ähnlichen Aufgaben? |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Es eigentlich gibt keine Geschwindigkeitseinbußen.
Allerdings wäre es denkbar, das auf einem 286er PC, kombiniert mit einem TBit-Netz, Performanceverluste auftreten. |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Zitat:
|
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Zitat:
Grüße Klaus |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Nur leider sind One-Time-Pads für solche Anwendungen denkbar ungeeignet, weil man dann regelmäßig neue echt zufällige (*) Schlüssel verteilen müsste, die nur den Kommunikationspartnern bekannt sind.
Und wenn selbst RC4 zu schwer ist, dann vermute ich, dass Quantenkryptografie für die Übertragung der Schlüssel nicht in Frage kommt :wink: (*) Sonst ist es nur so "sicher" wie der Pseudo-Zufallszahlengenerator (zb. RC4 :stupid:). Es gibt Hardware dafür, aber auch das ist Aufwand. |
AW: Schnelle Verschlüsselung/Entschlüsselung von Strings???
Es ging um die Aussage von Valle, XOR sei generell unsicher.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 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