Home of Gamehacking - Archiv

Normale Version: ini verschlüsseln aber wie???
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Ich baue mir grade ein Programm das eine ini als Speicherort benutzt.
Immerhin hab ich es hinbekommen unverschlüsselt eine speicherung hinzubekommen, was aber ein nachteil hat, weil man mit jedem Editor das auslesen kann, das soll aber nur mein Programm können und die Daten in der ListBox entschlüsselt in der Listbox anzeigen.

Ich zeige euch den bisherigen Code Speicher und Ladefunktion:

Code:
   
            'Speichert inhalt der Listbox in einer ini ab.         
            Dim ReadFile As Integer = FreeFile()
            FileOpen(ReadFile, ".\Zwischenspeicher.ini", OpenMode.Output)
            For Each Item In Zwischenspeicher.Items
                PrintLine(ReadFile, Item)
            Next
            FileClose(ReadFile)

            'Liest von der ini den inhalt aus und zeigt den gespeicherten inhalt
             wieder in der listbox an.
            FileOpen(ReadFile, ".\Zwischenspeicher.ini", OpenMode.Input)
            Do While Not EOF(ReadFile)
                Zwischenspeicher.Items.Add(LineInput(ReadFile))
            Loop
            FileClose(ReadFile)        


Wie gesagt es geht darum, dass ich ein Code brauche, der den inhalt einer Listbox in der ini Datei abspeichert, allerdings verschlüsselt und auch wieder entschlüsselt falls der inhalt der ini wieder eingelesen werden muss in der Listbox. Leider weis ich nicht wie ich das anstellen soll, bin leider noch nicht so begabt in Visual Basic. Wäre sehr dankbar freiwillige helfer.

mit freundlichen Grüßen,
Xiantrius

PUSH ... hmmm keiner eine idee? habs bis jetzt immer noch nicht hinbekommen. .... wäre echt nett wenn es hilfsbereite Leute gibt.
Hey,
also kommt drauf an für welche Zielgruppe. Wenn die Leute wirklich wenig Ahnung von Computern/Windows haben, dann könntest du auch deine ListBox Werte in eine Datei mit z.B der Endung .dat speichern. Leute die nicht wissen wie man die Datein öffnet, könnten davon schon abgeschreckt werden.
Oder du beschreibst die Datei im binary modus (siehe: http://www.cplusplus.com/doc/tutorial/files/ ).
Alternativ kannst du natürlich auch simpelste "Encryption" Algorithmen schreiben (siehe: http://www.daniweb.com/software-developm...ypt-vb.net ) oder du verwendest einen Algortihmus wie z.B Rijndel (siehe: http://de.wikipedia.org/wiki/Advanced_En...n_Standard ).
(27.11.2012, 01:34)Acubra schrieb: [ -> ]Hey,
also kommt drauf an für welche Zielgruppe. Wenn die Leute wirklich wenig Ahnung von Computern/Windows haben, dann könntest du auch deine ListBox Werte in eine Datei mit z.B der Endung .dat speichern. Leute die nicht wissen wie man die Datein öffnet, könnten davon schon abgeschreckt werden.
Oder du beschreibst die Datei im binary modus (siehe: http://www.cplusplus.com/doc/tutorial/files/ ).
Alternativ kannst du natürlich auch simpelste "Encryption" Algorithmen schreiben (siehe: http://www.daniweb.com/software-developm...ypt-vb.net ) oder du verwendest einen Algortihmus wie z.B Rijndel (siehe: http://de.wikipedia.org/wiki/Advanced_En...n_Standard ).

Ich hatte offenbar die Qual der Wahl und Encrypt/Decrypt war für mich die beste Wahl.
Vielen dank für deine Hilfe, hab intensive nachforschungen gemacht die mich einige Stunden gekostet haben.
Dafür hat sich die Sache nun gelohnt.
Hier das Ergebnis, könnte auch andere Helfen


Die Klasse brauch man dazu:

Code:
Imports System.Security.Cryptography
Imports System.Text
Public Class Class1
    'Mit dieser Funktion hat mit den Bytes zu tun, also die Hauptgrundfunktion für Cryptography mit.

    Public Shared Function Methode(ByVal key As String) As TripleDES
        Dim m As MD5 = New MD5CryptoServiceProvider
        Dim d As TripleDES = New TripleDESCryptoServiceProvider
        d.Key = m.ComputeHash(Encoding.Unicode.GetBytes(key))
        d.IV = New Byte(((d.BlockSize / 8)) - 1) {}
        Return d
    End Function
    'Mit dieser Funktion Verschlüsselt man mit Encrypt Methode. 
    Public Shared Function encrypt(ByVal value As String, ByVal key As String) As Byte()
        Dim d As TripleDES = Methode(key)
        Dim c As ICryptoTransform = d.CreateEncryptor
        Dim Input() As Byte = Encoding.Unicode.GetBytes(value)
        Return c.TransformFinalBlock(Input, 0, Input.Length)
    End Function
    'Mit dieser Funktion entschlüsselt man wieder mit decrypt Methode. 
    Public Shared Function decrypt(ByVal value As String, ByVal key As String) As String
        Dim b() As Byte = Convert.FromBase64String(value)
        Dim d As TripleDES = Methode(key)
        Dim c As ICryptoTransform = d.CreateDecryptor
        Dim output() As Byte = c.TransformFinalBlock(b, 0, b.Length)
        Return Encoding.Unicode.GetString(output)
    End Function

End Class



Bevor ihr das Design mit ListBox TextBox und buttons macht, bitte achtet darauf das der Code so zuerst ausehen muss. 2 Imports müssen zunext eingefügt werden erst dann gehts. Zum Designen und weiter coden was auch immer ihr bauen wollt das zu dem Code passt bzw. was ähnliches.

Code:
Imports System.IO
Imports PW_Generator.Class1
Public Class Form1

End Class



Speichert in Dateinamen ab zb. Typ text, ini usw... steht einen frei mit.

Code:
    Private Sub Speichern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Speichern.Click

Try
            If TextBox2.TextLength >= 6 Then
                Zwischenspeicher.Items.Add(Passwortholer_TextBox.Text)
                TextBox1.Clear()
                ''Mit Verschlüsselung
                Dim i As Integer
                For i = 0 To Zwischenspeicher.Items.Count - 1
                    TextBox1.Text = TextBox1.Text & Zwischenspeicher.Items(i) & vbCrLf
                    Dim b As String = TextBox1.Text
                    Dim c As Byte() = encrypt(b, a)
                    Dim d As String = Convert.ToBase64String(c)
                    File.WriteAllText("Zwischenspeicher.ini", d)
                Next i
            Else
                MsgBox("Die Zeilenlänge muss bis zu 6 Zeichen mindestens haben, damit es gespeichert werden kann.", MsgBoxStyle.Critical, "Fehler beim speichern!")
            End If
        Catch ex As Exception
        End Try
End Sub



'Lädt von der Datei in die TextBox mit Multiline und dann von der TextBox in die ListBox mit.

Code:
    Private Sub Lade_Direkt_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Try
            'Liest den Inhalt der Datei zb ini in der TextBox1 aus.
            'Ausserdem wird der Inhalt der TextBox in der ListBox importiert.
            Dim b As String = File.ReadAllText("Zwischenspeicher.ini")
            Dim c As String = decrypt(b, a)
            TextBox1.Text = c
            Zwischenspeicher.Items.AddRange(TextBox1.Lines)
            'Damit der Import ohne probleme läuft, wird folgender Code als 
            'Ergänzung noch eingefügt:
            'Verhindert, dass eine Leere Zeile in der ListBox erstellt wird, 
            'wenn von der TextBox1 die als Multiline fungiert und der inhalt 
            'in die Listbox als Items eingelesen werden sollen.
            For i As Integer = 0 To Zwischenspeicher.Items.Count - 1
                If Zwischenspeicher.Items.Item(i) = "" Then
                    Zwischenspeicher.Items.RemoveAt(i)
                End If
            Next
        Catch ex As Exception
        End Try

End Sub



Die Löschfunktion für alle Items in der ListBox und TextBox mit:

Code:
    Private Sub Lösche_alles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        ''Hier werden unwiderruflich alle Zeilen gelöscht inklusiv TextBox.
        Dim i As Integer
        For i = 0 To Zwischenspeicher.Items.Count - 1
            TextBox1.Clear()
            Zwischenspeicher.Items.Clear()
            Dim b As String = TextBox1.Text
            Dim c As Byte() = encrypt(b, a)
            Dim d As String = Convert.ToBase64String(c)
            File.WriteAllText("Zwischenspeicher.ini", d)
        Next i

    End Sub


'Hier wird nur ein gewähltes Item enfternt in der ListBox und säubert die TextBox mit:

Code:
    Private Sub Zwischenspeicher_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Zwischenspeicher.KeyUp

        Try
            If e.KeyCode = Keys.Delete Then
                Zwischenspeicher.Items.Remove(Zwischenspeicher.SelectedItem)
                TextBox1.Clear()
            End If
        Catch ex As Exception
        End Try

    End Sub


Das problem wäre nun gelöst dank dir Smiling.
Hab mir auch die Zeit genommen und ein kleines Tutorial aus dem Problemthema gebaut, ich meine das sollte auch belohnt werden.

Da wäre allerdings noch eine Frage, kann man das auch Direkt über die ListBox machen wie bei mein Code oder geht das in diesem Fall überhaupt nicht?
Habs ausprobiert und nicht direkt hinbekommen, aber muss ja nichts heisen.
Vielleicht geht es ja doch, weis aber nicht wie das geht???