1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
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
|