![]() |
Secure Chat
Hallo zusammen
Ich würde gerne ein kleines Chat Programm realisieren, mit Clients und einem Server. Nun, das ist nur die halbe Warheit... Die Kommunikation übers Netzwerk (LAN) soll verschlüsslet sein, sodass man die Nachrichten die hin- und hergeschickt werden nicht in Klartext auslesen kann. Nun, mit welchen Komponenten soll ich arbeiten? wie verschlüsseln? gibts n Turorial? Danke schon ma. |
Re: Secure Chat
Nimm eines der zahllosen Chatprogrämmelchen, die hier kursieren, oder auch IP-Komponenten als Beispiele beiliegen und denk Dir halt was aus, wie die zu sendenden Strings ver und entschlüsselt werden können.
Wie Du verschlüsselst ist Geschmackssache: ![]() ![]() oder echte Verschlüsselungen, die nicht so leicht zu knacken sind: ![]() ![]() und hier jetzt ein Tut: ![]() Sherlock |
Re: Secure Chat
Ja, danke. Das ist ja mein Problem. Ich suche eine gute Möglichkeit wie ich die Informationen verschlüsselt austauschen kann. Desshalb frage ich ja auch hier im Forum
nach, damit mir jemand was empfehlen kann was gut und "modern" ist. Wenns nicht sein muss, möchte ich die das ent- verschlüsseln nicht selber coden, sondern von vorhandenen Projekten wie OpenSSL oder ähnliches profitieren. |
Re: Secure Chat
Verwende eine symmetrische Verschlüsselung für die Kommunikation. (z.B. AES oder Twofish)
Um den Schlüssel zu übermitteln, empfiehlt sich eine asymmetrische Verschlüsselung wie RSA. Für dein eigentlichen "verschlüsselungs-Kram" kannst du das DEC verwenden ;) |
Re: Secure Chat
Hier wird die Benutzung von DEC diskutiert:
![]() Sherlock |
Re: Secure Chat
Warum nicht mit z.b. Indy die haben eine SSLHandler damit geht das ganz einfach
|
Re: Secure Chat
Zitat:
![]() habe mal versucht die DEC.dpk für D7 zu kompillieren, anscheinend findet er die dateien nicht -> [DCC Fataler Fehler] DEC.dpk(59): F2063 Verwendete Unit 'blablabla' kann nicht compiliert werden EDIT: Habe jetzt die Pfade angepasst, aber jetzt habe ich ein anderes Problem: [DCC Fehler] NMath.pas(200): E2029 Deklaration erwartet, aber Dateiende gefunden [DCC Fehler] NMath.pas(72): E2065 Ungenügende Forward- oder External-Deklaration: 'IsEqualGUID' [DCC Fehler] NMath.pas(73): E2065 Ungenügende Forward- oder External-Deklaration: 'NPool' . . . [DCC Fataler Fehler] DEC.dpk(59): F2063 Verwendete Unit '..\Part_II\LibIntf\NMath.pas' kann nicht compiliert werden Die Unit NMath.pas ist ja garnicht fertig?! Wo krieg ich ein funktionierendes Realease für D2009? |
Re: Secure Chat
Zitat:
![]() |
Re: Secure Chat
Super, Danke!
Scheint jedenfalls zu funktionieren. Habe mal das Beispielprogramm erstellt welches im ZIP-Archiv vorhanden war. Example.txt
Delphi-Quellcode:
wenn ich das richtig verstehe, wird der Text mit dem Rijndael (AES) verschlüsselt?!
The following code-snippet shows how to use the encryption and decryption
for widestrings/unicodestrings in a safe way: --- uses DECUtil, DECCipher, DECHash, DECFmt; ... var ACipherClass: TDECCipherClass = TCipher_Rijndael; ACipherMode: TCipherMode = cmCBCx; AHashClass: TDECHashClass = THash_Whirlpool; ATextFormat: TDECFormatClass = TFormat_Mime64; AKDFIndex: LongWord = 1; function Encrypt(const AText: String; const APassword: String): String; overload; var ASalt: Binary; AData: Binary; APass: Binary; begin with ValidCipher(ACipherClass).Create, Context do try ASalt := RandomBinary(16); APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex); Mode := ACipherMode; Init(APass); SetLength(AData, Length(AText) * SizeOf(AText[1])); Encode(AText[1], AData[1], Length(AData)); Result := ValidFormat(ATextFormat).Encode(ASalt + AData + CalcMAC); finally Free; ProtectBinary(ASalt); ProtectBinary(AData); ProtectBinary(APass); end; end; function Encrypt(const AText: WideString; const APassword: WideString): WideString; overload; var ASalt: Binary; AData: Binary; APass: Binary; begin with ValidCipher(ACipherClass).Create, Context do try ASalt := RandomBinary(16); APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex); Mode := ACipherMode; Init(APass); SetLength(AData, Length(AText) * SizeOf(AText[1])); Encode(AText[1], AData[1], Length(AData)); Result := ValidFormat(ATextFormat).Encode(ASalt + AData + CalcMAC); finally Free; ProtectBinary(ASalt); ProtectBinary(AData); ProtectBinary(APass); end; end; function Decrypt(const AText: String; const APassword: String): String; overload; var ASalt: Binary; AData: Binary; ACheck: Binary; APass: Binary; ALen: Integer; begin with ValidCipher(ACipherClass).Create, Context do try ASalt := ValidFormat(ATextFormat).Decode(AText); ALen := Length(ASalt) - 16 - BufferSize; AData := System.Copy(ASalt, 17, ALen); ACheck := System.Copy(ASalt, ALen + 17, BufferSize); SetLength(ASalt, 16); APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex); Mode := ACipherMode; Init(APass); SetLength(Result, ALen div SizeOf(AText[1])); Decode(AData[1], Result[1], ALen); if ACheck <> CalcMAC then raise Exception.Create('Invalid data'); finally Free; ProtectBinary(ASalt); ProtectBinary(AData); ProtectBinary(ACheck); ProtectBinary(APass); end; end; function Decrypt(const AText: WideString; const APassword: WideString): WideString; overload; var ASalt: Binary; AData: Binary; ACheck: Binary; APass: Binary; ALen: Integer; begin with ValidCipher(ACipherClass).Create, Context do try ASalt := ValidFormat(ATextFormat).Decode(AText); ALen := Length(ASalt) - 16 - BufferSize; AData := System.Copy(ASalt, 17, ALen); ACheck := System.Copy(ASalt, ALen + 17, BufferSize); SetLength(ASalt, 16); APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex); Mode := ACipherMode; Init(APass); SetLength(Result, ALen div SizeOf(AText[1])); Decode(AData[1], Result[1], ALen); if ACheck <> CalcMAC then raise Exception.Create('Invalid data'); finally Free; ProtectBinary(ASalt); ProtectBinary(AData); ProtectBinary(ACheck); ProtectBinary(APass); end; end; ... procedure TForm1.Button1Click(Sender: TObject); var s, k: WideString; begin s := 'The quick brown fox jumps over the lazy dog'; k := 'password'; Memo1.Lines.Clear; Memo1.Lines.Add( 'Encode Test: ' + Encrypt(s, k) + sLineBreak + 'Decode Test: ' + Decrypt(Encrypt(s, k), k) ); end; Dann kann ich ja so einen ziemlich sicheren Chat machen oder?! - Spielt die Passwortlänge eine Rolle für die Sicherheit, wenn ja, wie lange sollte das Passwort mindestens sein? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 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