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-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Passwort speichern 
Autor: Manfred X
Datum: 28.10.23 13:50

Hallo!

Schau mal dort ....
https://www.vbarchiv.net/forum/read.php?id=2&i=142112&t=142109
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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-2024 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