vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Mehrere Dateien zu einer Crypten 
Autor: StarTrekkker
Datum: 11.08.08 03:01

Moin,

ich schreibe seit einiger Zeit an einem kleinem Crypter, er operiert auf der Basis des AES Alghorhytmus und funktioniert so, wie er soll, wenn es um einzelne Dateien geht. Ich würde aber gerne auch eine Funktion haben, dass er mehrere Dateien nimmt, sie codiert und dann als eine ausgibt. Das ist auch gar nicht weiter problematisch, verpacken tut er ohne Fehler, nur wenn er es wieder entschlüsseln soll, kommt es immer zu Fehlern, weil ich die Byte-Arrays der einzelnen Dateien nicht von einander getrennt kriege.

Es kommt immer zu eine CryptoExeption, da das Byte Array nicht die richtige länge hat.

Hier ist der Code:
 
'Der Encryper
    Sub EncryptToSingleFile(ByVal Path() As String, ByVal Desination As String)
 
        Dim rd As New RijndaelManaged
 
        Dim md5 As New MD5CryptoServiceProvider
        Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes( _
          TextBox2.Text))
 
        md5.Clear()
        rd.Key = key
 
        Dim header As String = Path.Length & vbCrLf
 
        For i As Integer = 0 To Path.Length - 1
 
            rd.GenerateIV()
 
            Dim iv() As Byte = rd.IV
            Dim ms As New MemoryStream
 
            ms.Write(iv, 0, iv.Length)
 
            Dim cs As New CryptoStream(ms, rd.CreateEncryptor, _
              CryptoStreamMode.Write)
            Dim data() As Byte = FileIO.FileSystem.ReadAllBytes(Path(i))
 
            cs.Write(data, 0, data.Length)
            cs.FlushFinalBlock()
 
            Dim encdata() As Byte = ms.ToArray
 
            If Not FileIO.FileSystem.DirectoryExists("C:\Temp\TPC\") Then
 
                MkDir("C:\Temp\TPC\")
 
            End If
 
            Dim StrEncdata As String = Encoding.UTF8.GetString(encdata)
 
            FileIO.FileSystem.WriteAllText("C:\Temp\TPC\" & i & ".aes", _
              StrEncdata, False)
 
            Dim Filename As String = Path(i).Remove(0, Path(i).LastIndexOf("\"))
 
            header += Filename & "?" & StrEncdata.Length & vbCrLf
 
        Next
 
        header = header.Length + header.Length.ToString.Length + 5 & vbCrLf & _
          header
 
        FileIO.FileSystem.WriteAllText(desination & ".header", header, False)
 
        For i As Integer = 0 To Path.Length - 1
 
            Dim Current As String = FileIO.FileSystem.ReadAllText( _
              "C:\Temp\TPC\" & i & ".aes")
            Dim test As Integer = Current.Length
            FileIO.FileSystem.WriteAllText(desination, Current, True)
 
        Next
 
    End Sub
Zur Erklärung:
Der „Header“ ist ein Überbleibsel aus einem früheren Versuch die Eckdaten, der Datei in den Anfang der Codierten Datei zu setzen.

Die HeaderLength hätte ich eigentlich schon rauslöschen können, da ich den Header jetzt als eigenständige Datei speichere und sie somit hinfällig ist, hatte aber bisher keine Lust und mich stört sie in der entwiklungsphase auch nicht weiter.
 
' Der Decrypter
    Sub DecryptFromFile(ByVal File As String, ByVal TargetDirectory As String)
 
        Dim rd As New RijndaelManaged
        Dim RijndaelIVLength As Integer = 16
        Dim md5 As New MD5CryptoServiceProvider
 
        Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes( _
          TextBox2.Text))
 
        md5.Clear()
 
        ' Auslesen der Headerinformationen
        Dim header As String = FileIO.FileSystem.ReadAllText(File & ".header")
        Dim headerLength As Integer = Split(header, vbCrLf)(0)
 
        Dim FileCount As Integer = Split(header, vbCrLf)(1)
        Dim position As Integer
        For j As Integer = 0 To FileCount - 1
 
            Dim dataLength As Integer = Split(header, vbCrLf)(j + 2).Split("?")( _
              1)
            Dim dataName As String = Split(header, vbCrLf)(j + 2).Split("?")(0)
 
 
            Dim iv(15) As Byte
            Dim encdata() As Byte = FileIO.FileSystem.ReadAllBytes(File)
            ' Hier habe ich schon X codes drin gehabt um eine einzelne Datei an 
            ' den Memorystream zu reichen
            ' was bisher nur bei einzel Datein funktioniert hat.
            Dim ms As New MemoryStream(encdata)
            ms.Read(iv, 0, RijndaelIVLength)
            rd.IV = iv
            rd.Key = key
 
            Dim cs As New CryptoStream(ms, rd.CreateDecryptor, _
              CryptoStreamMode.Read)
 
            Try
                Dim data(ms.Length - RijndaelIVLength) As Byte
                Dim i As Integer = cs.Read(data, 0, data.Length)
                FileIO.FileSystem.WriteAllBytes(dataName, data, False)
                cs.Close()
                rd.Clear()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        Next
 
    End Sub
Ich würde mich sehr über hilfe bei diesem Problem freuen.

StarTrekkker
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Mehrere Dateien zu einer Crypten925StarTrekkker11.08.08 03:01
Re: Mehrere Dateien zu einer Crypten572ModeratorRalf Ehlert18.08.08 18:07
Re: Mehrere Dateien zu einer Crypten556ModeratorDaveS18.08.08 18:26

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel