AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Buffer ver-/entschlüsseln mit RCx

Ein Thema von Sko · begonnen am 5. Jul 2007 · letzter Beitrag vom 5. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#1

Buffer ver-/entschlüsseln mit RCx

  Alt 5. Jul 2007, 08:53
Hallo,

ich habe hier eine Socket-Komponente welche mir erlaubt Daten vor dem Senden zu verschlüsseln und nach dem Empfangen zu entschlüsseln TNBFPA. Dafür gibt es die Ereignisse OnEncryptData und OnDecryptData. In diesen Ereignissen möchte ich jetzt die zu sendenden Daten verschlüsseln, dafür hab ich hagens RCx-Unit verwendet, allerdings kommt beim entschlüsseln nicht das raus was beim verschlüsseln rein kommt. So sehen die Ereignisse jetzt aus:
Delphi-Quellcode:
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;
Hab ich da nen Fehler drin?
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Buffer ver-/entschlüsseln mit RCx

  Alt 5. Jul 2007, 09:12
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:
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;
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.

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
  Mit Zitat antworten Zitat
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Buffer ver-/entschlüsseln mit RCx

  Alt 5. Jul 2007, 09:23
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
Miniaturansicht angehängter Grafiken
vergleich_108.jpg  
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Buffer ver-/entschlüsseln mit RCx

  Alt 5. Jul 2007, 10:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Buffer ver-/entschlüsseln mit RCx

  Alt 5. Jul 2007, 10:17
Naja, laut Doku zur Kompo werden diese Events aufgerufen bevor das Paket durchs Protokoll auseinander genommen wird:
Zitat:
OnDecryptData wird ausgelöst, wenn ein Datenpaket aus der
Serververbindung gelesen wurde und vor der Weiterverarbeitung
entschlüsselt werden soll. Das Datenpaket ist als „strukturloses Stück Speicher“ zu betrachten.

OnEncryptData wird ausgelöst, wenn ein Datenpaket für den Versand zum Server bereit ist
und verschlüsselt werden soll. Wird keine Ereignisbehandlungsmethode bereitgestellt, werden
die Daten unverschlüsselt zum Server übertragen. Für die Entschlüsselung der Daten beim Empfang
im Server wird dort das Ereignis OnDecryptData ausgelöst. Das Datenpaket ist als
„strukturloses Stück Speicher“ zu betrachten.
EDIT: ich hab die Frage nochmal im Topic zu Komponente im DF gepostet: [Link]
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Buffer ver-/entschlüsseln mit RCx

  Alt 5. Jul 2007, 10:23
Zitat von Sko:
Naja, laut Doku zur Kompo werden diese Events aufgerufen bevor das Paket durchs Protokoll auseinander genommen wird:
Nein, widerspricht nicht meiner Aussage. Es ist ein
Zitat:
„strukturloses Stück Speicher“ zu betrachten.
. Diese kannst du aneinander reihen oder auch auseinander nehmen. Da wird auch kein Protokoll erwähnt welches dies macht. Ein Klotz an Daten der versendet bzw. empfangen wurde, dieser wird den Routinen übergeben. Das auf die Trennung der Datenpackete geachtet wird, steht auch dort nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Buffer ver-/entschlüsseln mit RCx

  Alt 5. Jul 2007, 10:31
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.
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Buffer ver-/entschlüsseln mit RCx

  Alt 5. Jul 2007, 11:02
Zitat von Sko:
Hmm, na gut, dann könnte ich probieren das direkt in der Komponente zu machen, an der Stelle wo das dann auseinandergenommen wird
Nur damit es keine Mißverständnisse gibt: Die Komponente nimmt nichts auseinander, sie empfängt einfach nicht mehr bzw. nur diesen Teil (also der Socket kann nur diese Teilung/Block liefern)
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: Buffer ver-/entschlüsseln mit RCx

  Alt 5. Jul 2007, 12:54
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:
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;
FRCxEncode und FRCxDecode sind Felder deines TForms und werden in deinem äußeren Protokollhandler initialisiert, also wenn der Client<->Server mit ihrem Datenaustausch beginnen.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: Buffer ver-/entschlüsseln mit RCx

  Alt 5. Jul 2007, 12:59
Andererseits, warum RXc benutzen wenns viel besseres gibt ? Ja schon alles fertig ?

Schau mal hier http://www.delphipraxis.net/internal...976&highlight=

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 Uhr.
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