Kryptographie mit VB.NET

13/10/2008 - 10:14 von Thomas Hübner | Report spam
Hi NG,

ich würde gerne eine Verschlüsselte Kommunikation mit einem Server
realisieren. Der Server bietet mir dazu folgende Schnittstelle für ein
UDP Kommunikation (der Server kennt Usernamen und Passwort):

Anfrage:
1. Byte: Zeichen "&" als Kennung für ein verschlüsseltes Paket
2.-5. Byte: CRC32 des MD5 des Usernamens
6.-9. Byte: CRC32 des Inhaltes
10. Byte: Lànge des Inhaltes
11. ab hier der Inhalt des Paketes

Danach wird die Sequenz ab dem 6. Byte mit AES verschlüsselt. Der
Schlüssel ist MD5 des Passwortes.

Das heist also, ich muß ein Bytarray erzeugen in dem ich erstmal ab
dem 11.Byte den in Inhalt reinkopiere und die Lànge in Byte 10. Dann
die CRC32 aus dem Inhalt in 6-9 und das ganze ab 6 AES verschlüsseln.
Dann den CRC32(MD5(username)) auf 2-5 und auf 1 das "&"

Ich habe noch nie mit Bytarrays gearbeitet - wie geht man sowas an?
Zumal sich durch die AES Verschlüsselung die Lànge des Arrays àndert.
Ich würde vermutl. mit vielen kleinen Arrays anfangen die ich dann zu
einem Großen zusammensetze.

Serverantwort:
Ab dem 6. Byte muß mit AES entschlüsselt werden. Schlüssel ist MD5 des
Passwortes. Der Buffer muß in der Lànge bis "0A" gekürzt werden (Rest
sind Padding Bytes von AES) Danach muß der verbleibende Inhalt (Byte
11 bis "0A" mit der CRC32 aus Byte 6-9 geprüft werden.

Ich habe beim googlen Bordmittel-Lösungen für eigentlich alle
"Komponenten" (CRC32, MD5, AES) gefunden. Allerdings tue ich mich sehr
schwer das alles in eine Klasse zu packen in der ich oben den Inhalt,
Passwort und Usernamen einkippe und das encryptete Bytarray
rauskriege.

Am dringensten bràuchte ich Input zur Manipulation von Bytearrays um
die Serveranfrage hinzubekommen.

Gruß,
Thomas
 

Lesen sie die antworten

#1 Thomas Scheidegger
13/10/2008 - 15:15 | Warnen spam
Hallo Thomas

6.-9. Byte: CRC32



offenbar ein 32-Bit Wert, in einem Byte-Array.
Da stellt sich immer die Frage nach der Endianess
(little/big-endian)
muss irgendwo in der Protokoll-Spez bestimmt sein.


Ich habe noch nie mit Bytarrays gearbeitet



ist aber eigentlich Informatik-Grundlage...

In .NET Framework u.a.:
BitConverter.GetBytes/ToXXX (PC:little endian)
Buffer.BlockCopy

Oder je nach Progr.Sprache auch per Bit-Schiebe-Operationen.

In einigen Fàllen ggf auch indirekt via .NET Marshal-Klasse,
mit einer Structure.


mit vielen kleinen Arrays anfangen



eher nein,
besser vorab die exakte Gesamtlànge bestimmen,
ein entsprechendes Byte-Array anlegen
und dann die Positionen einfüllen.



Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/

Ähnliche fragen