![]() |
Buffer ver-/entschlüsseln mit RCx
Hallo,
ich habe hier eine Socket-Komponente welche mir erlaubt Daten vor dem Senden zu verschlüsseln und nach dem Empfangen zu entschlüsseln ![]() ![]()
Delphi-Quellcode:
Hab ich da nen Fehler drin?
procedure TMainForm.ClientEncryptData(Sender: TObject; PA: TProtocolAdapter;
var Buffer; const Size: Integer); var ARCx: TRCxContext; begin RCxInit(ARCx,'<Passwort>'); RCxEncode(ARCx,Buffer,Buffer,Size); RCxDone(ARCx); end; procedure TMainForm.ClientDecryptData(Sender: TObject; PA: TProtocolAdapter; var Buffer; const Size: Integer); var ARCx: TRCxContext; begin RCxInit(ARCx,'<Passwort>'); RCxDecode(ARCx,Buffer,Buffer,Size); RCxDone(ARCx); end; |
Re: Buffer ver-/entschlüsseln mit RCx
Das sieht gut aus und müsste funktionieren.
Die Vermutung liegt nahe das deine TCP/IP Komponente die Daten die übertragen werden nicht als binäre Daten akzeptiert. Benutze mal
Delphi-Quellcode:
Um die Daten im Buffer nach der Ver-schlüsselung mit denen VOR der Ent-Schlüsselung zu vergleichen. Wir testen also ob deine TCP/IP Komponenten die Daten NICHT verändert.
procedure TMainForm.ClientEncryptData(Sender: TObject; PA: TProtocolAdapter; var Buffer; const Size: Integer);
var ARCx: TRCxContext; begin RCxInit(ARCx,'<Passwort>'); RCxEncode(ARCx,Buffer,Buffer,Size); RCxDone(ARCx); ShowMessage( TFormat_HEX.Encode(Buffer, Size) ); end; procedure TMainForm.ClientDecryptData(Sender: TObject; PA: TProtocolAdapter; var Buffer; const Size: Integer); var ARCx: TRCxContext; begin ShowMessage( TFormat_HEX.Encode(Buffer, Size) ); RCxInit(ARCx,'<Passwort>'); RCxDecode(ARCx,Buffer,Buffer,Size); RCxDone(ARCx); end; Wird nämlich der Buffer intern durch die Komponete als zb. LongString verwaltet dann kann eine #0 im Buffer diesen Datenstring verkürzen. Oder irgend ein anderer Formatierer konvertiert die daten so das alle x Zeichen ein Zeilenumbruch eingefügt wird, auch die verändert die Daten. Solche Datenveräderungen führen dazu das die Entschlüsselung fehlschlägt und ist bisher die häufigste Ursache für Supportanfragen an mich gewesen. Gruß Hagen |
Re: Buffer ver-/entschlüsseln mit RCx
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm, das passt wirklich nicht zusammen (siehe Anhang)
[EDIT] OK, ich glaub ich weis woran´s liegt, der Client empfängt manchmal 2 Nachrichtensequenzen gleichzeitig, dann stimmts natürlich nicht mehr, mal sehen wie ich das hinbekomme. Beispiel: Server sendet 1B4BA8037D0EF2119A8E9FE15BF94E2B3EEBB6EA und 53E3DD9B62D668F41801ED0B8C336B98AECB77542B0D0720D8 358D96D14C Client empfängt 1B4BA8037D0EF2119A8E9FE15BF94E2B3EEBB6EA53E3DD9B62D668F41801ED0B8C336B98AECB77542B0D0720D8 358D96D14C |
Re: Buffer ver-/entschlüsseln mit RCx
Ja und? Die Trennung der Datenpackete ist Aufgabe des Protokolls, die Sockets haben nur die Aufgabe die Daten zu übertragen. Auch wenn du es als einzelne Teile versendest können sie mehr oder auch weniger unterteilt wieder rauskommen beim Empfänger. Die Socket übertragen nur Bytes, die kennen keine Trennung und machen auch nichts in der Richtung. Du musst für dich ein Protokoll vereinbaren mit dem du die Datenpackete auseinander halten kannst und somit auch weisst ob ein Packet vollständig ist und du es verarbeiten (entschlüsseln) kannst.
|
Re: Buffer ver-/entschlüsseln mit RCx
Naja, laut Doku zur Kompo werden diese Events aufgerufen bevor das Paket durchs Protokoll auseinander genommen wird:
Zitat:
![]() |
Re: Buffer ver-/entschlüsseln mit RCx
Zitat:
Zitat:
|
Re: Buffer ver-/entschlüsseln mit RCx
Hmm, na gut, dann könnte ich probieren das direkt in der Komponente zu machen, an der Stelle wo das dann auseinandergenommen wird und nicht den ganzen Datenstrom ver-/entschlüsseln, sondern nur den Teil den Inhalt der "Frames" ohne den Header mit zu verschlüsseln.
|
Re: Buffer ver-/entschlüsseln mit RCx
Zitat:
|
Re: Buffer ver-/entschlüsseln mit RCx
Besser. Dein Fehler liegt darin das du jedesmal lokal den RCx mit dem Passwort initialisierst.
Die grundsätzliche Philosophie beim TCP/IP lautet: Der kontinuierliche Datenstrom wird in Packete zerlegt die dann mit unterschiedlicher Geschiendigkeit und über verschiedene Datenkanäle im WEB verteilt übertragen werden und auf Clientseite durcheinander empfangen werden können, ABER vom TCP/IP treiber des Systemes IMMER in korrekter Reihenfolge wieder zusammengebastelt werden, es entsteht wieder ein korrekter und fehlerfreier Datenstrom. TCP/IP stellt also sicher das die Daten ohne Fehler wieder empfangen werden. Ergo: bevor du Daten versendest initialisierst du zwei globale Variable die RCx enthalten und in deinen Eventhandlern rufst du nur noch RCxEncode()Decode() auf. Gruß Hagen
Delphi-Quellcode:
FRCxEncode und FRCxDecode sind Felder deines TForms und werden in deinem äußeren Protokollhandler initialisiert, also wenn der Client<->Server mit ihrem Datenaustausch beginnen.
procedure TMainForm.ClientEncryptData(Sender: TObject; PA: TProtocolAdapter; var Buffer; const Size: Integer);
begin RCxEncode(FRCxEncoide, Buffer, Buffer, Size); end; procedure TMainForm.ClientDecryptData(Sender: TObject; PA: TProtocolAdapter; var Buffer; const Size: Integer); begin RCxDecode(FRCxDecode, Buffer, Buffer, Size); end; Gruß Hagen |
Re: Buffer ver-/entschlüsseln mit RCx
Andererseits, warum RXc benutzen wenns viel besseres gibt ? Ja schon alles fertig ?
Schau mal hier ![]() Hier hast du was wesentlich sicheres. Nicht nur die Daten werden sicher verschlüsselt sondern auch der Login-Prozess, also wenn sich Client/Server untereinander verbidnen, wird gesichert. Also nur wenn sich der Client und Server gegenseitig authentifiziert haben (ihren unfälschbaren digitalen Ausweiß gezeigt haben) wird eine verschlüsselte Kommunikation aufgebaut. Ich habe das alles in eine DLL die Interfaces benutzt eingebaut, also relative einfach zu benutzen. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 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 by Thomas Breitkreuz