Feedback

VB - Username und Password

Veröffentlicht von am 17.12.2006
(4 Bewertungen)
Die nachfolgende Klasse legt in der Registry einen neuen Schlüssel an und Speichert darin den Usernamen und einen Passwordhasch zu dem gespeicherten Usernamen.

Soll das Ausführen einer Anwendung nur bestimmten Usern gestattet sein, oder soll die Anwendung entsprechend geschützt werden, so kann man diese Klasse dafür verwenden, um den Schutz einzurichten.

In einem Formular wird eine Authentifizierung eingebaut, ist dies Erfolgreich - startet die Anwendung oder das Programm, wenn nicht - Shutdown/Exit/ was auch immer.

Die Klasse speichert zur zeit nur den Passwordhasch verschlüsselt, es ist jedoch kein Problem, auch den Usernamen zu Verschlüssen. Es kann der gleich Hash verwendet werden.

Imports Microsoft.VisualBasic
Imports System.Text
Imports System.Security.Cryptography



Public Class clsUserAndPassword

    Public CurrentApplication As String = My.Application.Info.ProductName

    ''' <summary>
    ''' Die nächste Function Speichert Zwei Werte (Username und Password)
    ''' in der Registry.
    ''' 
    ''' Es ist u.U. sinnvoller anstelle von  HKEY_LOCAL_MACHINE
    ''' den Zweig                            HKEY_CURRENT_USER
    ''' zu verwenden. 
    ''' 
    ''' Bei HKEY_LOCAL_MACHINE müssen Sie dann darauf achten, dass
    ''' der User schreibenden Zugriff auf den entprechenden 
    ''' Reg.-Key hat
    ''' 
    ''' Bitte beachten Sie, dass nur das Password verschlüsselt
    ''' wird.
    ''' 
    ''' Wollen Sie mehr Sicherheit, müssen Sie auch den Usernamen
    ''' verschlüsseln.
    ''' 
    ''' 
    ''' Aufruf aus einem Formular (Wert in Local Maschine:)
    ''' 
    ''' Auf dem Formular befindet sich eine Textbox mit dem Namen PASSWORDTEXT
    ''' 
    ''' ------------------------------------------------------------------------------
    ''' 
    '''    Dim cls As New clsUserAndPassword
    '''    cls.SaveUserAndPasswordInRegistry(My.User.Name.ToString, PASSWORDTEXT.text)
    ''' 
    ''' ------------------------------------------------------------------------------
    ''' 
    ''' Es wird True oder False zurückgegeben
    ''' 
    ''' 
    '''    
    ''' 
    ''' Aufruf aus einem Formular (Wert in CURRENT_USER)
    ''' 
    ''' Auf dem Formular befindet sich eine Textbox mit dem Namen PASSWORDTEXT
    ''' 
    ''' ------------------------------------------------------------------------------
    ''' 
    '''    Dim cls As New clsUserAndPassword
    '''    cls.SaveUserAndPasswordInRegistry(My.User.Name.ToString, PASSWORDTEXT.text)
    ''' 
    ''' ------------------------------------------------------------------------------
    ''' 
    ''' Es wird True oder False zurückgegeben
    ''' 
    ''' </summary>
    ''' <param name="txtUsername"></param>
    ''' <param name="txtPassword"></param>
    ''' <remarks></remarks>
    ''' 



    Public Sub SaveUserAndPasswordInRegistryCU(ByVal txtUsername As String, _
        ByVal txtPassword As String)

        Dim hashPassword As String = GetHash(txtPassword)
        My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\" & CurrentApplication, txtUsername, hashPassword)

    End Sub

    Public Sub SaveUserAndPasswordInRegistry(ByVal txtUsername As String, _
            ByVal txtPassword As String)

        Dim hashPassword As String = GetHash(txtPassword)

        My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\Software\" & CurrentApplication, txtUsername, hashPassword)

    End Sub

    ''' <summary>
    ''' Hier werden Username und Password aus der Registry wieder
    ''' ausgelesen und auf Richtigkeit geprüft.
    ''' Die Werte werden als TRUE (alles ok) oder FALSE (Fehler bei
    ''' Username oder Password) zurückgegeben.
    ''' 
    ''' Wird im folgenden anstelle von My.computer.Registy
    ''' die Funktion                   Microsoft.Win32.Registry
    ''' verwendet, muss man auf die 
    ''' geöffneten Schlüssel unbedingt wieder schließen
    ''' 
    ''' </summary>
    ''' <param name="txtUsername"></param>
    ''' <param name="txtPassword"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>

    Public Function CheckTypedPwdWithRegHash(ByVal txtUsername As String, ByVal txtPassword As String) As Boolean

        'Hashwert aus txtPassword erstellen
        Dim NewHashPassword As String = GetHash(txtPassword)

        'Die in der Registry gespeicherten Werte wieder auslesen.
        Dim ReadPasswordHash As String = Convert.ToString(My.Computer.Registry.GetValue( _
           "HKEY_LOCAL_MACHINE\Software\" & CurrentApplication, _
           txtUsername, Nothing))

        ' Vergleichen der Werte.
        If (ReadPasswordHash = Nothing) Then
            'Ungültiger Benutzer.
            Return False
        ElseIf (ReadPasswordHash = NewHashPassword) Then
            ' Username und Password sind OK.
            Return True
        Else
            'Username OK, Password falsch.
            Return False
        End If
    End Function

    Public Function CheckTypedPwdWithRegHashCU(ByVal txtUsername As String, ByVal txtPassword As String) As Boolean

        'Hashwert aus txtPassword erstellen
        Dim NewHashPassword As String = GetHash(txtPassword)

        'Die in der Registry gespeicherten Werte wieder auslesen.
        Dim ReadPasswordHash As String = Convert.ToString(My.Computer.Registry.GetValue( _
           "HKEY_CURRENT_USER\Software\" & CurrentApplication, _
           txtUsername, Nothing))

        ' Vergleichen der Werte.
        If (ReadPasswordHash = Nothing) Then
            'Ungültiger Benutzer.
            Return False
        ElseIf (ReadPasswordHash = NewHashPassword) Then
            ' Username und Password sind OK.
            Return True
        Else
            'Username OK, Password falsch.
            Return False
        End If
    End Function

    Public Function GetHash(ByVal plainText As String) As String
        'Hier wird ein Hashwert erstellt. Es wird ein leerer String
        'zurückegegebenn wenn etwas nicht stimmt.
        ' 
        Dim simpleByte As Byte()
        Dim ApplicationHash As MD5CryptoServiceProvider
        Dim ApplicationHashBytes As Byte()
        Dim ApplicationHashText As String

        Try
            ' Hier wird der Textwert in ein ByteArray geschrieben
            simpleByte = Encoding.UTF8.GetBytes(plainText)

            'Auswahl eines CryptoServiceProviders
            ApplicationHash = New MD5CryptoServiceProvider

            'Alternative
            'Dim ApplicationHash As SHA1CryptoServiceProvider = New SHA1CryptoServiceProvider()


            'Hashwert aus den Bytes
            ApplicationHashBytes = ApplicationHash.ComputeHash(simpleByte)

            'Umwandeln von hashwerten ind Hexadcimalwert
            ApplicationHashText = Replace(BitConverter.ToString(ApplicationHashBytes), "-", "")
            Return ApplicationHashText
        Catch
            Return "Es ist ein Fehler aufgetreten"
        End Try

    End Function


End Class


Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!