Logfile verschlüsseln

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von BiedermannS.

    Logfile verschlüsseln

    Hallo Leute

    Brauche mal Hilfe von den Profis.
    Hab für meinen Arbeitgeber ein kleines Programm geschrieben welches bei jedem Zugriff ein Logfile erstellt.
    Weil das File nur in dem Ordner erstellt werden kann in welchem sich auch die eigentliche Anwendung befindet wollte ich den Inhalt verschlüsseln.
    Mithilfe einiger Tutorials und Tipps habe ich mittlerweile einen Code zusammen für die Verschlüsselung, nur schaffe ich es nicht einen zu schreiben der mir das Logfile wieder entschlüsselt. Ich denke mal dass es nicht so schwer sein kann, komme aber echt nicht weiter und wäre über jede Hilfe oder Hinweis froh.

    Hier schon mal mein Code für die Erstellung des verschlüsselten Files:

    VB.NET-Quellcode

    1. Dim filename As String = Application.StartupPath & "\logfile.log"
    2. Dim des As New DESCryptoServiceProvider()
    3. Dim desencrypt As ICryptoTransform = des.CreateEncryptor()
    4. Dim cryptostream As New CryptoStream(File.Open(filename, FileMode.Append), desencrypt, CryptoStreamMode.Write)
    5. Dim sw As New StreamWriter(cryptostream)
    6. sw.WriteLine(Now() & " " & vbTab & "Log" & vbTab & SystemInformation.UserName)
    7. sw.Close()




    Danke schon mal im Voraus und Grüsse
    Kobe
    Gibt es einen guten Grund warum das Ganze verschlüsselt werden soll? Log-Files sind doch dazu da, um ausgelesen zu werden oder?
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    BiedermannS schrieb:

    Gibt es einen guten Grund warum das Ganze verschlüsselt werden soll? Log-Files sind doch dazu da, um ausgelesen zu werden oder?


    Jop den gibt es.
    Da ich nur die Möglichkeit habe das Logfile in dem Ordner erstellen zu lassen in dem sich die Anwendung befindet und ich resp. der Auftraggeber nicht möchte, dass jeder User das Logfile einsehen kann, müsste der Text verschlüsselt werden. Für eine Auswertung würde es dann wieder entschlüsselt werden.
    .NET ist diesbezüglich eher unsicher, da man das Programm dekompilieren könnte um zu sehen wie es verschlüsselt wurde.

    Warum kannst du das Logfile nur in diesen Ordner schreiben?

    Mach einfach einen Unterordner. In diesem haben user nur schreibrechte. Somit kannst du deine Datei hineinschreiben, ohne dass diese wer auslesen kann.


    Hier nur ein Beispiel:

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim pfad As String = "c:\meinordner\"
    3. Dim di As IO.DirectoryInfo
    4. Dim sec As New System.Security.AccessControl.DirectorySecurity(IO.Directory.GetParent(pfad).FullName, Security.AccessControl.AccessControlSections.All)
    5. If Not IO.Directory.Exists(pfad) Then
    6. sec.AddAccessRule(New Security.AccessControl.FileSystemAccessRule(System.Security.Principal.WindowsIdentity.GetCurrent.Name, Security.AccessControl.FileSystemRights.Write, Security.AccessControl.AccessControlType.Allow))
    7. sec.AddAccessRule(New Security.AccessControl.FileSystemAccessRule(System.Security.Principal.WindowsIdentity.GetCurrent.Name, Security.AccessControl.FileSystemRights.ReadAndExecute, Security.AccessControl.AccessControlType.Deny))
    8. di = IO.Directory.CreateDirectory(pfad, sec)
    9. End If
    10. Using sw As New IO.StreamWriter(IO.Path.Combine(pfad, "test.log"), True, Text.Encoding.Default)
    11. sw.WriteLine("test")
    12. sw.Flush()
    13. End Using
    14. End Sub


    Lesezugriff wird einfach für alle gesperrt die darin nichts zu suchen haben. Somit kannst du trotzdem noch hineinschreiben, aber keiner daraus lesen.
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BiedermannS“ ()

    Beim ver-und entschlüsseln hat mir der Link hier geholfen. Mit den darin enthaltenen Infos kann man sich leicht ne Funktion fürs Ver-und Entschlüsseln von Dateien basteln. :D

    Was ich am Anfang falsch gemacht habe, weshalb meine Funktion zum entschlüsseln nicht geklappt hatte, war, dass ich beim Verschlüsseln nen anderen "IV" und "Key" als beim Entschlüsseln benutzt habe.

    mfg Busch

    Edit:
    Hier hab ich mal eben meine Funktionen herausgesucht. Sie sind zwar nicht perfekt, erfüllen aber ihren Zweck :D

    Verschlüsseln:

    VB.NET-Quellcode

    1. Private Sub dateischreiben(ByVal Inputpfad as String, ByVal Outputpfad as String)
    2. Using des = AesCryptoServiceProvider.Create()
    3. des.Key = Key
    4. des.IV = IV
    5. Dim ICT As ICryptoTransform = des.CreateEncryptor(des.Key, des.IV)
    6. Using s As New FileStream(Inputpfad, FileMode.OpenOrCreate)
    7. Using t As New FileStream(Outputpfad, FileMode.OpenOrCreate)
    8. Using cs As New CryptoStream(t, ICT, CryptoStreamMode.Write)
    9. Dim ms As New MemoryStream
    10. s.CopyTo(ms)
    11. Dim array() As Byte = ms.ToArray
    12. cs.Write(array, 0, array.Length)
    13. End Using
    14. End Using
    15. End Using
    16. End Using
    17. End Sub


    Entschlüsseln:

    VB.NET-Quellcode

    1. Private Function dateilesen(ByVal Inputpfad as String) As String
    2. Dim entschlüsselt As String = Nothing
    3. Using des = AesCryptoServiceProvider.Create()
    4. des.Key = Key
    5. des.IV = IV
    6. Dim ICT As ICryptoTransform = des.CreateDecryptor(des.Key, des.IV)
    7. Using s As New FileStream(Inputpfad, FileMode.Open)
    8. Using cs As New CryptoStream(s, ICT, CryptoStreamMode.Read)
    9. Using sr As New StreamReader(cs)
    10. While sr.EndOfStream = False
    11. entschlüsselt = sr.ReadToEnd
    12. End While
    13. End Using
    14. End Using
    15. End Using
    16. End Using
    17. Return entschlüsselt
    18. End Function


    Das müsste eig. klappen. Jedoch gibt die Funktion zum Entschlüsseln nur den entschlüsselten Text aus und schreibt ihn nicht wieder in die Datei, das müsstest du ergänzen. :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „buschmanR“ ()

    @buschmannR: Und was bringt das, wenn jeder dein Programm auslesen kann?

    buschmanR schrieb:

    Hier hab ich mal eben meine Funktionen herausgesucht. Sie sind zwar nicht perfekt, erfüllen aber ihren Zweck

    Ist nicht böse gemeint, aber die Funktionen sind Schrott.

    1. Für was verschlüsseln, wenn du nicht mal ein Passwort benutzt.
    2. von wo kommt der Key von wo der IV?


    Hier ein Link zu einer Verschlüsselungs-Library.

    Aber ich denke das verschlüsseln hier der falsche Weg ist....
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    Für was verschlüsseln, wenn du nicht mal ein Passwort benutzt.
    von wo kommt der Key von wo der IV?


    Die kann man ja vorher festlegen/generieren lassen.

    Aber mit dem auslesen hast du wohl Recht. Ich benutze die Funktionen in nem anderen Kontext und hier passen sie wohl nicht so ganz. :D

    mfg buschmanR

    Kobejitsu schrieb:

    nur schaffe ich es nicht einen zu schreiben der mir das Logfile wieder entschlüsselt.
    Ver- und Entschlüsselung solltest Du gepaart entwickeln, also sofort mit der Verschlüsselung auch die Entschlüsselung.
    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!
    @BiedermannS

    Also ich denke, dass es sicherer ist mit .net zu verschlüsseln, als einen UNTERORDNER mit Schreibrechten anzulegen... Einen Unterordner dürfte man mit entsprechenden Mitteln (selbst wenn man sich nicht auskennt) schneller öffnen können als das Programm zu dekompilieren. Ausserdem gibt es doch auch Möglichkeiten, das eigene Programm vor Dekompilierung zu schützen;)

    LG
    Luloak2
    @Luloak2:

    ich merke gerade das du keinen plan hast wie .NET funktioniert.
    Lad dir JetBrains dotPeek herunter und lad damit dein Assembly. Tatata, dekompiliert.

    Natürlich kann man das Programm "schützen", aber das ist meistens teuer.

    Luloak2 schrieb:


    Also ich denke, dass es sicherer ist mit .net zu verschlüsseln, als einen UNTERORDNER mit Schreibrechten anzulegen

    Wenn schon, müsste man das ganze mit nem nativen c++ Programm verschlüsseln, sonst ist es nicht sicher.

    Wenn ich die Berechtigungen einschränke, hat keiner zugriff darauf, ausser er wirft ne Live-CD ins Laufwerk, aber das kann man auch verhindern (Stichwort: BIOS). Somit kann man die Daten, in diesem Fall, mit Windows-Boardmitteln besser schützen, als mit .NET.
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D