Passwört speichern für Proxy-Authentifizierung

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von C-Sharp.

    Passwört speichern für Proxy-Authentifizierung

    Nabend zusammen,

    ich möchte gerne in meine Anwendung eine Möglichkeit einbauen, einen Proxy mit Authentifizierung zu verwenden.

    Jetzt stellt sich für mich die Frage wie ich am besten das Passwort vom Benutzer speicher... bevorzugt in den Settings.

    Für PowerShell-Skripte habe ich mal ein Skript geschrieben (wird jedoch nur auf Servern ausgeführt und nicht für die Allgemeinheit zugängig), das Klartext-Passwörter in einen SecureString konvertiert und mit ConvertFrom-SecureString in eine Datei schreibt.

    Das das in C# möglich ist mir bekannt, jedoch stellt sich für mich die Frage ob das sicher genug ist? Die Datei kann ja nur unter dem aktuellen Benutzer unter dem die Datei erstellt wurde wieder entschlüsselt werden.

    Oder habt ihr vielleicht bessere / alternative Lösungen?

    EDIT (08.08.2015 00:47): Kann mir einer sagen wie ich den SecureString richtig abspechern kann? In PowerShell ist das schön einfach mit ConvertFrom-SecureString | Out-File seucre.txt :)
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „C-Sharp“ ()

    Verschlüssel mit AES256, nimm als Key ein Masterpasswort, das der Benutzer festlegt und dann eingibt.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade Ich möchte eigentlich vermeiden das der Benutzer nochmal ein Passwort eingeben muss.

    Ich würde das Passwort gerne wie bei PowerShell speichern, das nur der Benutzer der das Passwort gespeichert hat, dieses auch wieder entschlüsseln kann.

    Habe dazu folgenden Code gefunden:

    stackoverflow.com/questions/88…sswords-in-my-application

    Spoiler anzeigen

    C#-Quellcode

    1. private static readonly byte[] entropy = Encoding.Unicode.GetBytes("Salt Is Not A Password");
    2. public static SecureString ToSecureString(string _string)
    3. {
    4. SecureString secureString = new SecureString();
    5. foreach (char c in _string.ToCharArray())
    6. {
    7. secureString.AppendChar(c);
    8. }
    9. secureString.MakeReadOnly();
    10. return secureString;
    11. }
    12. public static string ToInsecureString(SecureString _secureString)
    13. {
    14. IntPtr unmanagedString = IntPtr.Zero;
    15. try
    16. {
    17. unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(_secureString);
    18. return Marshal.PtrToStringUni(unmanagedString);
    19. }
    20. finally
    21. {
    22. Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString);
    23. }
    24. }
    25. public static string EncryptString(SecureString _secureString)
    26. {
    27. var encryptedData = ProtectedData.Protect(
    28. Encoding.Unicode.GetBytes(ToInsecureString(_secureString)),
    29. entropy,
    30. DataProtectionScope.CurrentUser);
    31. return Convert.ToBase64String(encryptedData);
    32. }
    33. public static SecureString DecryptString(string encryptedData)
    34. {
    35. try
    36. {
    37. var decryptedData = ProtectedData.Unprotect(
    38. Convert.FromBase64String(encryptedData),
    39. entropy,
    40. DataProtectionScope.CurrentUser);
    41. return ToSecureString( Encoding.Unicode.GetString(decryptedData));
    42. }
    43. catch
    44. {
    45. return new SecureString();
    46. }
    47. }


    Ist dies als Schutz akzeptabel? Habe das mal getestet und der EncryptedString lässt sich auch nur unter dem richtigen Benutzer wieder umwandeln.

    Dient die entropy als eine Art Salt? Da die ja im Programm unverschlüsselt hinterlegt ist.

    Den EncryptedString speicher ich dann in den Settings ab.
    Bilder
    • Settings_Network.png

      9,67 kB, 536×363, 77 mal angesehen
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!