Dateien AES-Ver und Entschlüsseln

  • VB.NET
  • .NET (FX) 4.0

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    Dateien AES-Ver und Entschlüsseln

    Hallo liebe Community,
    ich hab da ein kleines Problem. Ich arbeite momentan an der überarbeitung von meinem PassKey - Passwort Generator.
    Ich versuche derzeit eine Datei mit AES zu verschlüsseln. Das Klappt soweit mit folgender Funktion auch wunderbar.

    VB.NET-Quellcode

    1. Function encrypt(ByVal DATA As String, ByVal key As Byte(), ByVal IV As Byte(), Optional ByVal ConvertToBase64 As Boolean = False)
    2. Dim aesProv As New AesCryptoServiceProvider
    3. Dim encrypted() As Byte
    4. Dim encryptor As ICryptoTransform = aesProv.CreateEncryptor(key, IV)
    5. Using msEncrypt As New MemoryStream()
    6. Using csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
    7. Using swEncrypt As New StreamWriter(csEncrypt)
    8. swEncrypt.Write(DATA)
    9. End Using
    10. encrypted = msEncrypt.ToArray()
    11. End Using
    12. End Using
    13. If ConvertToBase64 = False Then
    14. Return encrypted
    15. Else
    16. Return Convert.ToBase64String(encrypted)
    17. End If
    18. End Function


    Aufgerufen so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim fbd As New FolderBrowserDialog
    3. If fbd.ShowDialog = DialogResult.OK Then
    4. Dim zipper As New Zimpler.ZipFile
    5. zipper.AddFolder(fbd.SelectedPath, True)
    6. zipper.Save(My.Computer.FileSystem.CurrentDirectory & "\test.zop")
    7. Dim Encrypter As New SeToNet.core.aesClass
    8. Encrypter.create()
    9. Dim fileBytes() As Byte = File.ReadAllBytes("test.zop")
    10. Dim data As String = Convert.ToBase64String(fileBytes)
    11. File.WriteAllBytes("archive.encrypted", Encrypter.encrypt(data, Encrypter.key, Encrypter.IV, False))
    12. Dim fileBytes2() As Byte = File.ReadAllBytes("archive.encrypted")
    13. Dim data2 As String = Convert.ToBase64String(fileBytes)
    14. File.WriteAllBytes("archive.decrypted", Encrypter.decrypt(data2, Encrypter.key, Encrypter.IV, False))
    15. End If
    16. End Sub



    das problem hab ich beim Decrypten. (Beim Encrypter.decrypt())

    VB.NET-Quellcode

    1. Function decrypt(ByVal DATA As String, ByVal key As Byte(), ByVal IV As Byte())
    2. Dim aesProv As New AesCryptoServiceProvider
    3. aesProv.GenerateKey()
    4. 'MsgBox(BitConverter.ToString(aesProv.Key))
    5. aesProv.GenerateIV()
    6. Dim cyphertext As Byte() = Convert.FromBase64String(DATA)
    7. Dim decryptor As ICryptoTransform = aesProv.CreateDecryptor(key, IV)
    8. Dim plaintext As String = String.Empty
    9. Using msDecrypt As New MemoryStream(cyphertext)
    10. Using csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)
    11. Using srDecrypt As New StreamReader(csDecrypt)
    12. 'Write all data to the stream.
    13. plaintext = srDecrypt.ReadToEnd()'Hier wird ausgeworfen dass es kein vollständiger Block sei. (Mit strings klappt das alles wunderbar eig ... )
    14. End Using
    15. End Using
    16. End Using
    17. Return plaintext
    18. End Function
    19. End Class

    Viele Frauen kamen, viele sind gegangen, eine ist geblieben 12.5.12 <3 ich liebe dich Schatz :love: :love:
    Mir fällt ansonsten keine andere Methode ein, wie ich in die verschlüsselten Bytes käme. Am liebsten würd ich es so oder so als Zurückgeben, damit ich es als base64String ausgeben kann (für string, oder sollte ich für Strings und Files eine seperate Funktion schreiben).
    Viele Frauen kamen, viele sind gegangen, eine ist geblieben 12.5.12 <3 ich liebe dich Schatz :love: :love:

    Linkai schrieb:

    wie ich in die verschlüsselten Bytes
    System.Text.Encoding.GetBytes(String)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Linkai schrieb:

    Mir fällt ansonsten keine andere Methode ein, wie ich in die verschlüsselten Bytes käme. Am liebsten würd ich es so oder so als Zurückgeben, damit ich es als base64String ausgeben kann (für string, oder sollte ich für Strings und Files eine seperate Funktion schreiben).

    Ist doch ganz einfach: Du machst dir eine Verschlüsselungsfunktion, in die du Bytes reinwirfst und Bytes ausgibst und mit der Entschlüsselungsfunktion ebenfalls. Und die Bytes zu bekommen ist kein Hexenwerk, du benutzt ja einen Memorystream sprich einfach ToArray aufrufen.

    Dann kannst du dir immernoch Funktionen bauen, mit denen du auch Strings ver- und entschlüsseln. Diese sollten intern dann einfach die Methoden von oben nutzen. Bytes sind einfacher handzuhaben als da mit Strings hin und her konvertieren.

    LG
    Ich verweise jetzt einfach mal auf das hier:
    AES Verschlüsselung

    Diese Formen: \__/
    Das sind die Streams. Und die sind ja problemlos ineinander schachtelbar. Also einfach so:

    VB.NET-Quellcode

    1. Using TargetFileStream = File.OpenWrite(Zieldatei)
    2. Using Cryptor = Provider.CreateEncryptor oder CreateDecryptor(...)
    3. Using CStream As New CryptoStream(TargetFileStream, Cryptor, CryptoStreamMode.Write)
    4. Using SourceFileStream = File.OpenRead(Quelldatei)
    5. SourceFileStream.CopyTo(CStream)
    6. End Using
    7. End Using
    8. End Using
    9. End Using

    Da muss man die Daten garnie angreifen. Und wie richtig gesagt wurde: Dateien beinhalten Bytes. Bei der Verschlüsselung ist egal, ob die Daten irgendwelche Strings darstellen, oder ein JPEG-Bild, oder sonstwas. Die Verschlüsslung verschlüsselt einfach stumpf die Bytes.

    @RodFromGermany
    Das wäre ja doppelt gemoppelt, zuerst die Bytes aus der Datei zu nehmen, die in irgendeine String-Form zu bringen um sie dann wieder zu Bytes zu machen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils