[VB.NET] - TCP Datei symmetrische Verschlüsselung

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von noob98.

    [VB.NET] - TCP Datei symmetrische Verschlüsselung

    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:

    VB.NET-Quellcode

    1. Dim BufferBytes(5) As Byte 'Nicht wundern nur test
    2. Dim Rijndael As New System.Security.Cryptography.RijndaelManaged
    3. '1. Verschlüsselung (normal)
    4. Using fsm_out As New FileStream("Verschlüsselt.encr", FileMode.Create, FileAccess.Write)
    5. Using CryptoStream As New System.Security.Cryptography.CryptoStream(fsm_out, Rijndael.CreateEncryptor(Rijndael.Key, Rijndael.IV), System.Security.Cryptography.CryptoStreamMode.Write)
    6. Using fsm As New FileStream("Geheim.txt", FileMode.Open, FileAccess.Read)
    7. Dim i As Integer = fsm.Read(BufferBytes, 0, BufferBytes.Length)
    8. Do While i > 0
    9. CryptoStream.Write(BufferBytes, 0, i)
    10. i = fsm.Read(BufferBytes, 0, BufferBytes.Length)
    11. Loop
    12. End Using
    13. End Using
    14. End Using
    15. '------------------------------------------
    16. '------------------------------------------
    17. '2. Verschlüsselung
    18. 'DIESER wird später durch den TCP Stream ersetzt
    19. Dim t_stream As New FileStream("Verschlüsselt (Server).encr", FileMode.Create, FileAccess.Write)
    20. Using MS As New MemoryStream()
    21. Using CryptoStream As New System.Security.Cryptography.CryptoStream(MS, Rijndael.CreateEncryptor(Rijndael.Key, Rijndael.IV), System.Security.Cryptography.CryptoStreamMode.Write)
    22. Using fsm As New FileStream("Geheim.txt", FileMode.Open, FileAccess.Read)
    23. Dim i As Integer = fsm.Read(BufferBytes, 0, BufferBytes.Length)
    24. Do While i > 0
    25. CryptoStream.Write(BufferBytes, 0, i)
    26. If MS.Position > 0 Then
    27. MS.Position = 0
    28. i = MS.Read(BufferBytes, 0, BufferBytes.Length)
    29. Do While i > 0
    30. t_stream.Write(BufferBytes, 0, i)
    31. i = MS.Read(BufferBytes, 0, BufferBytes.Length)
    32. Loop
    33. MS.Position = 0
    34. End If
    35. i = fsm.Read(BufferBytes, 0, BufferBytes.Length)
    36. Loop
    37. End Using
    38. Console.WriteLine(MS.Length)
    39. End Using
    40. End Using
    41. t_stream.Close()
    42. '------------------------------------------
    43. '------------------------------------------
    44. '1. Entschlüsselung (normal)
    45. Using fsm_out As New FileStream("Entschlüsselt.txt", FileMode.Create, FileAccess.Write)
    46. Using CryptoStream As New System.Security.Cryptography.CryptoStream(fsm_out, Rijndael.CreateDecryptor(Rijndael.Key, Rijndael.IV), System.Security.Cryptography.CryptoStreamMode.Write)
    47. Using fsm As New FileStream("Verschlüsselt.encr", FileMode.Open, FileAccess.Read)
    48. Dim i As Integer = fsm.Read(BufferBytes, 0, BufferBytes.Length)
    49. Do While i > 0
    50. CryptoStream.Write(BufferBytes, 0, i)
    51. i = fsm.Read(BufferBytes, 0, BufferBytes.Length)
    52. Loop
    53. End Using
    54. End Using
    55. End Using
    56. '------------------------------------------
    57. '------------------------------------------
    58. '2. Entschlüsselung (fehlgeschlagen)
    59. Using fsm_out As New FileStream("Entschlüsselt (Server).txt", FileMode.Create, FileAccess.Write)
    60. Using CryptoStream As New System.Security.Cryptography.CryptoStream(fsm_out, Rijndael.CreateDecryptor(Rijndael.Key, Rijndael.IV), System.Security.Cryptography.CryptoStreamMode.Write)
    61. Using fsm As New FileStream("Verschlüsselt (Server).encr", FileMode.Open, FileAccess.Read)
    62. Dim i As Integer = fsm.Read(BufferBytes, 0, BufferBytes.Length)
    63. Do While i > 0
    64. CryptoStream.Write(BufferBytes, 0, i)
    65. i = fsm.Read(BufferBytes, 0, BufferBytes.Length)
    66. Loop
    67. End Using
    68. End Using
    69. End Using


    Könnt Ihr mir helfen? Vielen dank für jede Antwort!
    GELÖST:
    Die letzten 16 Bytes einfach auslesen....

    VB.NET-Quellcode

    1. Dim t_stream As New FileStream("Verschlüsselt (Server).encr", FileMode.Create, FileAccess.Write)
    2. Dim MS As New MemoryStream()
    3. Using CryptoStream As New System.Security.Cryptography.CryptoStream(MS, Rijndael.CreateEncryptor(Rijndael.Key, Rijndael.IV), System.Security.Cryptography.CryptoStreamMode.Write)
    4. Using fsm As New FileStream("Geheim.txt", FileMode.Open, FileAccess.Read)
    5. Dim i As Integer = fsm.Read(BufferBytes, 0, BufferBytes.Length)
    6. Do While i > 0
    7. CryptoStream.Write(BufferBytes, 0, i)
    8. If MS.Position > 0 Then
    9. MS.Position = 0
    10. i = MS.Read(BufferBytes, 0, BufferBytes.Length)
    11. Do While i > 0
    12. t_stream.Write(BufferBytes, 0, i)
    13. i = MS.Read(BufferBytes, 0, BufferBytes.Length)
    14. Loop
    15. MS.Position = 0
    16. End If
    17. i = fsm.Read(BufferBytes, 0, BufferBytes.Length)
    18. Loop
    19. End Using
    20. End Using
    21. MS.Close()
    22. Dim LastBytes As Byte() = functions.MemoryBytesToBytes(MS.ToArray(), 16)
    23. t_stream.Write(LastBytes, 0, LastBytes.Length)
    24. t_stream.Close()