| |
VB.NET - FortgeschritteneRe: Passwort speichern | | | Autor: Wasi_LE | Datum: 02.11.23 21:12 |
| Hallo effeff,
vielen Dank für deinen Beitrag. Prinzipiell stimme ich dem zu. Es gibt aber meiner Meinung nach mehrere Situationen, in denen du das Passwort für eine Anmeldung brauchst. Abgesehen von meinem Fall einer Proxyanmeldung ist auch das E-Mailkonto in Outlook so ein Fall. Dort richtest du auch deine Anmeldung am Konto ein und hinterlegst dein Passwort, damit Outlook beim senden/empfangen die Authentifizierung durchführen kann.
Wie würdest du das lösen, ohne das Passwort wieder zu entschlüsseln?
Vielen Dank und vG
Andi | |
Passwort speichern | | | Autor: Wasi_LE | Datum: 28.10.23 10:33 |
| Guten Morgen,
ich habe eine Anwendung entwickelt, deren Anwendereinstellungen in einer XML-Datei in AppData/LocalLow ... gespeichert werden.
Teil der Anwendung ist auch ein User-Name und ein Passwort. Diese werden bislang auch in der XML-Datei gespeichert.
Das Passwort ist aber bislang für jedermann einsehbar, da es als einfacher String gespeichert wird.
Kann mir jemand etwas helfen, wie ich das Passwort kryptisch speichern und auch auch wieder auslesen kann?
Vielen Dank und ein schönes WE.
Andi | |
Re: Passwort speichern | | | Autor: Wasi_LE | Datum: 29.10.23 08:13 |
| Guten Morgen,
vielen herzlichen Dank Manfred. Ich hatte selber auch im Forum schon gesucht, war aber nicht fündig geworden. Ich hatte es nicht im Anfängerforum vermutet. Das speichern habe ich soweit hinbekommen.
Aber wie konvertiere ich es zurück. Die Funktionen sind so konzipiert, dass ein Passwort eingerichtet und abgelegt wird und dann ein User ein Passwort z.B. für einen Login eingibt und dann verglichen werden kann. Wo wird eigentlich das Random Salt abgelegt, benötige ich das nicht, wenn ich den Vergleichsstring erzeuge?
Ich möchte das Passwort dauerhaft hinterlegen und eine Anmeldung automatisieren. Im speziellen geht es bei mir um eine Proxy-Konfiguration. Die Einstellungen für den Proxy sollen in der Anwendung eingetragen und nicht jedes mal abgefragt werden. Deswegen benötige ich die Rückkonvertierung des gesalzenen Passworts. Vermutlich wird das mit einem Random Salt nicht funktionieren, wenn ich das alles richtig verstanden habe.
Kannst du mir da noch kurz helfen.
Danke für deine Mühe.
Viele Grüße
Andi | |
Re: Passwort speichern | | | Autor: Manfred X | Datum: 29.10.23 09:48 |
| Hallo!
Die Klasse erstellt einen Random-String als "Salt" und kombiniert
das eingegebene Passwort mit diesem "Salz", um diesen Gesamtstring zu hashen.
Gespeichert werden zwei Strings: der kombinierte Hash-String UND der Salt-String.
Warum man das macht, ist in dem Text erläutert, den ich im Kommentar der
Klasse verlinkt habe. Die Entschlüsselung des Passworts wird durch diese Maßnahme
erheblich erschwert.
Ich weiß nicht, was Du meinst, wenn Du schreibst "Passwort dauerhaft hinterlegen".
Die Anwendung, die diese Klasse nutzt, benötigt nur Zugriff auf die UserIdent-Datei.
Sie enthält die beiden Strings, die zur Prüfung des Passworts benötigt werden. | |
Re: Passwort speichern | | | Autor: Wasi_LE | Datum: 29.10.23 17:36 |
| Hallo Manfred,
ok, dass Salz wird mit gespeichert. Habe ich verstanden ...
Meine Anwendung benötigt einen Internetzugriff. Einige Kunden nutzen einen Proxyserver.
Das heißt, dass meine Anwendung den Proxy unterstützen muss, um Zugriff zum Internet zu haben.
Den Proxy muss ich konfigurieren. Unter anderem schließt die Konfiguration eine Anmeldung (Anmeldename + Passwort) am Proxy ein. Ich kann vom Kunden nicht verlangen, dass er jedesmal ein Passwort für den Proxy eingeben muss. Es darf zurecht erwartet werden, dass das in den Programmeinstellungen (also meiner Anwendung) hinterlegt wird.
Ich mache das mit einem HttpWebRequest.
Dim MeinRequest as HttpWebRequest
MeinRequest = DirectCast(WebRequest.Create("bla bla bla")
Dim Wp As New WebProxy(MeinProxy, MeinPort)
Dim WpCredentials As New NetworkCredential With {
.UserName = MeinProxyUserName,
.Password = MeinProxyPassword
}
Wp.Credentials = WpCredentials
MeinRequest.Proxy = WP
...
... Das funktioniert auch alles soweit und ist getestet. Die einzige Krücke, die ich noch habe ist, dass das Passwort im Klartext gespeichert wird. Das kann ich ja aber nicht wirklich wollen.
Um den Proxy zu konfigurieren muss ich das Passwort übergeben und nicht den gesalzene und gehashten String. Dazu brauche ich das entschlüsselte Passwort, oder verstehe ich das falsch.
Vielen Dank für deine Mühe.
vG
Andi | |
Re: Passwort speichern | | | Autor: Kuno60 | Datum: 29.10.23 18:19 |
| Hallo,
ein Passwort verschlüsselt speichern und wieder entschlüsseln und verwenden, geht am einfachsten mit der ProtectedData-Klasse.
Diese erzeugt ein verschlüsseltes Byte-Array mithilfe eines geheimen Windows-Schlüssels. Es kann nur auf dem eigenen Rechner entschlüsselt werden!
Wenn das Byte-Array nicht direkt, sondern als String in der XML-Datei gespeichert werden soll, so kann man es Base64 kodieren.
(Convert.ToBase64String, Convert.FromBase64String)
Beipiel:
Imports System.Security.Cryptography
Imports System.Text
Module Module1
''' <summary>
''' Beliebiges zusätzliches Byte-Array, um die Sicherheit zu erhöhen.
''' </summary>
Private ReadOnly Zus As Byte() = {17, 114, 32, 97, 144, 84, 8, 206, 12, 78}
''' <summary>
''' Verschlüsselt einen String und liefert ein Byte-Array.
''' </summary>
Friend Function Verschlüsseln(data As String) As Byte()
Try
Dim ba As Byte() = Encoding.Default.GetBytes(data)
Return ProtectedData.Protect(ba, Zus, DataProtectionScope.CurrentUser)
Catch ex As Exception
Return Nothing
End Try
End Function
''' <summary>
''' Entschlüsselt ein Byte-Array und liefert den originalen String.
''' </summary>
Friend Function Entschlüsseln(data As Byte()) As String
Try
Dim ba As Byte() = ProtectedData.Unprotect(data, Zus, _
DataProtectionScope.CurrentUser)
Return Encoding.Default.GetString(ba)
Catch ex As CryptographicException
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try
Return String.Empty
End Function
End Module | |
Re: Passwort speichern | | | Autor: Wasi_LE | Datum: 30.10.23 10:09 |
| Guten Morgen Kuno60,
vielen herzlichen Dank - es kann so einfach sein.
Aufgabe gelöst !!!
vG
Andi | |
Re: Passwort speichern | | | Autor: effeff | Datum: 31.10.23 13:36 |
| Also... Eigentlich wird ein Passwort überhaupt nicht gespeichert, sondern NUR der Hashwert. Bei der Eingabe des Passwortes wird dann verglichen, ob der Hashwert mit dem gespeicherten Hashwert übereinstimmt.
EALA FREYA FRESENA | |
Re: Passwort speichern | | | Autor: effeff | Datum: 06.11.23 14:10 |
| OK, das ist etwas anderes. Da habe ich auch keine andere Lösung dafür.
EALA FREYA FRESENA | |
Re: Passwort speichern | | | Autor: Manfred X | Datum: 07.11.23 12:31 |
| Hallo!
Das vom Benutzer eingegebene Passwort wird DOPPELT verschlüsselt und in dieser
Form gespeichert.
Bei der Anmeldung wird die gespeicherte Verschlüsselung einmal entschlüsselt und
diese noch verschlüsselte Passwort-Zeichenfolge als tatsächliches Anmelde-Passwort
verwendet.
Dieses Vorgehen kann man aber nur anwenden, wenn der Nutzer sich stets über ein
Programm anmeldet, aber nicht direkt. | |
| 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 |
|
|
sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|