vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 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
Re: Datei Verschlüsseln 
Autor: ModeratorDaveS (Moderator)
Datum: 18.07.04 12:16

Aber zum anderen Thema...dein Problem ist nicht ganz trivial. Wie man Software schützt
ist etwas was nicht mal MS so richtig im Griff hat. Aber immerhin, hier ein einfaches
Beispiel mit PW Hash im Program. Den Hash habe ich als Hex ausgegeben
(GenerateHashButton_Click()) und von Hand dann eingefügt.

Das Programm verschlüsselt eine Datei mit diesem Hash als Schlüssel, beim
Einlesen verlangt es dann das Klartext Passwort und prüft es bevor die Daten
eingelesen und entschlüsselt werden.

Das ist natürlich keine ausreichende Lösung. Man könnte z.B. beim Setup einen
Schlüssel pro Benutzer generieren und. verschlüsselt in der Registry ablegen, und den
eingebauten Hash nur als Masterschlüssel verwenden.

Das Problem, dass jemand dein Programm reverse enginiert ist damit nicht gelöst.

Imports System.Security.Cryptography
Imports System.IO
Imports System.Text
 
Public Class Form1
    Inherits System.Windows.Forms.Form
 
#Region " Windows Form Designer generated code "
 
    ' Generated from "pw" aber so etwas wie "rTz16p??x79" wäre besser...
    Private _pwhash As Byte() = {&H1A, &H91, &HD6, &H2F, &H7C, &HA6, &H73, _
      &H99, &H62, &H5A, &H43, &H68, &HA6, &HAB, &H5D, &H4A, &H3B, &HAA, &H60, _
      &H73}
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
        PasswordTextBox.Text = "pw"
        WriteDataTextBox.Text = "some data" + vbCrLf + "more data"
    End Sub
 
    Private Sub GenerateHashButton_Click(ByVal sender As System.Object, ByVal e _
      As System.EventArgs) Handles GenerateHashButton.Click
        Dim h As New SHA1Managed
 
        Dim hash As Byte() = h.ComputeHash(Encoding.UTF8.GetBytes( _
          PasswordTextBox.Text))
        h.Clear()
        hx(hash)
    End Sub
 
    Private Sub WriteDataButton_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles WriteDataButton.Click
        Dim fs As New FileStream("C:\enc.txt", FileMode.Create, _
        FileAccess.Write, FileShare.None)
 
        Dim rm As New RijndaelManaged
 
        rm.GenerateIV()
        Dim iv() As Byte = rm.IV
 
        SetRijndaelKey(rm, _pwhash)
 
        fs.Write(iv, 0, iv.Length)
 
        Dim cs As New CryptoStream(fs, rm.CreateEncryptor(), _
          CryptoStreamMode.Write)
 
        Dim sw As New StreamWriter(cs, Encoding.UTF8)
        sw.Write(WriteDataTextBox.Text)
        sw.Close()
        rm.Clear()
 
    End Sub
 
    Private Sub ReadDataButton_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles ReadDataButton.Click
 
        If Not checkPassword(PasswordTextBox.Text) Then
            MsgBox("Password invalid")
            Return
        End If
 
        Dim fs As New FileStream("C:\enc.txt", FileMode.Open, FileAccess.Read, _
          FileShare.None)
 
        Dim rm As New RijndaelManaged
 
        Dim iv(rm.IV.Length - 1) As Byte
 
        fs.Read(iv, 0, iv.Length)
 
        rm.IV = iv
 
        SetRijndaelKey(rm, _pwhash)
 
        Dim cs As New CryptoStream(fs, rm.CreateDecryptor(), _
          CryptoStreamMode.Read)
 
        Dim sr As New StreamReader(cs, Encoding.UTF8)
        ReadDataTextBox.Text = sr.ReadToEnd()
        sr.Close()
        rm.Clear()
 
    End Sub
 
    Private Function checkPassword(ByVal pw As String) As Boolean
        Dim h As New SHA1Managed
 
        Dim hash As Byte() = h.ComputeHash(Encoding.UTF8.GetBytes( _
          PasswordTextBox.Text))
        h.Clear()
        For i As Integer = 0 To hash.Length - 1
            If _pwhash(i) <> hash(i) Then Return False
        Next
        Return True
    End Function
 
    Private Sub SetRijndaelKey(ByVal rm As Rijndael, ByVal seed As Byte())
        Dim key(rm.KeySize / 8 - 1) As Byte
 
        Dim j As Integer
 
        For i As Integer = 0 To key.Length - 1
            If j = seed.Length Then j = 0
            key(i) = seed(j)
            j += 1
        Next
        rm.Key = key
    End Sub
 
    Private Sub hx(ByVal ba() As Byte)
        For Each b As Byte In ba
            Debug.Write(Hex(b))
        Next
        Debug.WriteLine("")
    End Sub
 
End Class
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Datei Verschlüsseln1.437vbtest217.07.04 11:46
Re: Datei Verschlüsseln1.115ModeratorFZelle17.07.04 13:13
Re: Datei Verschlüsseln1.111ModeratorDaveS17.07.04 21:41
Re: Datei Verschlüsseln1.105vbtest218.07.04 09:59
Re: Datei Verschlüsseln1.094ModeratorMoni18.07.04 11:10
Re: Datei Verschlüsseln1.155vbtest219.07.04 11:04
Re: Datei Verschlüsseln1.614ModeratorDaveS18.07.04 12:16

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