Guten Abend Zusammen,
Ich bräuchte mal wieder eure Hilfe. Ich möchte über eine TCP Verbindung eine Datei verschlüsselte übermitteln (mit einer symmetrischen Verschlüsselung). Zurzeit benutze ich den "Rijndael" Algorithmus, dass Problem ist, dass ich die letzten 16 Bytes nicht bekomme. Zur Veranschaulichung:
- Verschlüsselung einer Datei (ganz normal)
- Verschlüsselung einer Datei in eine MemoryStream (der SpeicherStream wird später durch den TCP_Stream ersetzt)
- Entschlüsselung der 1. Datei (ganz normal; alles sauber)
- Entschlüsselung der 2. Datei (16 Bytes weniger als 1. Datei; Entschlüsselung fehlgeschlagen)
Bei der ersten (normalen) Verschlüsselung wird die Datei 256 Bytes groß. Bei der zweiten Verschlüsselung (die später der TCP Stream machen soll) wird die Datei nur 240 Bytes groß. Dementsprechend funktioniert auch die zweite Entschlüsselung nicht.
Wie bekomme ich also die letzten 16 Bytes? Nach dem schließen hat der Stream diese... Oder soll ich ganz anders vorgehen?
CODE:
Könnt Ihr mir helfen? Vielen dank für jede Antwort!
Ich bräuchte mal wieder eure Hilfe. Ich möchte über eine TCP Verbindung eine Datei verschlüsselte übermitteln (mit einer symmetrischen Verschlüsselung). Zurzeit benutze ich den "Rijndael" Algorithmus, dass Problem ist, dass ich die letzten 16 Bytes nicht bekomme. Zur Veranschaulichung:
- Verschlüsselung einer Datei (ganz normal)
- Verschlüsselung einer Datei in eine MemoryStream (der SpeicherStream wird später durch den TCP_Stream ersetzt)
- Entschlüsselung der 1. Datei (ganz normal; alles sauber)
- Entschlüsselung der 2. Datei (16 Bytes weniger als 1. Datei; Entschlüsselung fehlgeschlagen)
Bei der ersten (normalen) Verschlüsselung wird die Datei 256 Bytes groß. Bei der zweiten Verschlüsselung (die später der TCP Stream machen soll) wird die Datei nur 240 Bytes groß. Dementsprechend funktioniert auch die zweite Entschlüsselung nicht.
Wie bekomme ich also die letzten 16 Bytes? Nach dem schließen hat der Stream diese... Oder soll ich ganz anders vorgehen?
CODE:
VB.NET-Quellcode
- Dim BufferBytes(5) As Byte 'Nicht wundern nur test
- Dim Rijndael As New System.Security.Cryptography.RijndaelManaged
- '1. Verschlüsselung (normal)
- Using fsm_out As New FileStream("Verschlüsselt.encr", FileMode.Create, FileAccess.Write)
- Using CryptoStream As New System.Security.Cryptography.CryptoStream(fsm_out, Rijndael.CreateEncryptor(Rijndael.Key, Rijndael.IV), System.Security.Cryptography.CryptoStreamMode.Write)
- Using fsm As New FileStream("Geheim.txt", FileMode.Open, FileAccess.Read)
- Dim i As Integer = fsm.Read(BufferBytes, 0, BufferBytes.Length)
- Do While i > 0
- CryptoStream.Write(BufferBytes, 0, i)
- i = fsm.Read(BufferBytes, 0, BufferBytes.Length)
- Loop
- End Using
- End Using
- End Using
- '------------------------------------------
- '------------------------------------------
- '2. Verschlüsselung
- 'DIESER wird später durch den TCP Stream ersetzt
- Dim t_stream As New FileStream("Verschlüsselt (Server).encr", FileMode.Create, FileAccess.Write)
- Using MS As New MemoryStream()
- Using CryptoStream As New System.Security.Cryptography.CryptoStream(MS, Rijndael.CreateEncryptor(Rijndael.Key, Rijndael.IV), System.Security.Cryptography.CryptoStreamMode.Write)
- Using fsm As New FileStream("Geheim.txt", FileMode.Open, FileAccess.Read)
- Dim i As Integer = fsm.Read(BufferBytes, 0, BufferBytes.Length)
- Do While i > 0
- CryptoStream.Write(BufferBytes, 0, i)
- If MS.Position > 0 Then
- MS.Position = 0
- i = MS.Read(BufferBytes, 0, BufferBytes.Length)
- Do While i > 0
- t_stream.Write(BufferBytes, 0, i)
- i = MS.Read(BufferBytes, 0, BufferBytes.Length)
- Loop
- MS.Position = 0
- End If
- i = fsm.Read(BufferBytes, 0, BufferBytes.Length)
- Loop
- End Using
- Console.WriteLine(MS.Length)
- End Using
- End Using
- t_stream.Close()
- '------------------------------------------
- '------------------------------------------
- '1. Entschlüsselung (normal)
- Using fsm_out As New FileStream("Entschlüsselt.txt", FileMode.Create, FileAccess.Write)
- Using CryptoStream As New System.Security.Cryptography.CryptoStream(fsm_out, Rijndael.CreateDecryptor(Rijndael.Key, Rijndael.IV), System.Security.Cryptography.CryptoStreamMode.Write)
- Using fsm As New FileStream("Verschlüsselt.encr", FileMode.Open, FileAccess.Read)
- Dim i As Integer = fsm.Read(BufferBytes, 0, BufferBytes.Length)
- Do While i > 0
- CryptoStream.Write(BufferBytes, 0, i)
- i = fsm.Read(BufferBytes, 0, BufferBytes.Length)
- Loop
- End Using
- End Using
- End Using
- '------------------------------------------
- '------------------------------------------
- '2. Entschlüsselung (fehlgeschlagen)
- Using fsm_out As New FileStream("Entschlüsselt (Server).txt", FileMode.Create, FileAccess.Write)
- Using CryptoStream As New System.Security.Cryptography.CryptoStream(fsm_out, Rijndael.CreateDecryptor(Rijndael.Key, Rijndael.IV), System.Security.Cryptography.CryptoStreamMode.Write)
- Using fsm As New FileStream("Verschlüsselt (Server).encr", FileMode.Open, FileAccess.Read)
- Dim i As Integer = fsm.Read(BufferBytes, 0, BufferBytes.Length)
- Do While i > 0
- CryptoStream.Write(BufferBytes, 0, i)
- i = fsm.Read(BufferBytes, 0, BufferBytes.Length)
- Loop
- End Using
- End Using
- End Using
Könnt Ihr mir helfen? Vielen dank für jede Antwort!