Hilfe zu Visual C#



  • Hallo Zusammen,

    ich bin noch neu in Visual C# Programmierung und bin dabei meine Kenntnisse in C# zu vertiefen. Deshalb versuche ich gerade einen kleinen App zu programmieren, mit dem ich ein Passwort festlegen und später ändern kann.

    Also das GUI soll aus 3 Feldern bestehen und zwar wie folgt:

    1. Feld: Geben Sie Ihr Passwort ein
    2. Feld: Geben Sie ein neues Passwort ein
    3. Feld: Wiederholen Sie Ihr neues Passwort

    Knopf speichern
    Knopf Abbrechen

    Kann mir jemand vielleicht helfen und mir einen Tipp geben, wie ich ein neues Passwort speichere und venetuell das alte Passwort abrufen kann??! Ich bin für jeden Tipp sehr dankbar.

    Vielen Dank im Voraus



  • Geht es dir nur darum, mit C# und .NET herumzuspielen oder willst du tatsächlich einen sinnvollen Passwortschutz für irgendwas programmieren?

    Im ersten Fall könntest du das Passwort in einer Datei speichern. Wenn du es ansatzweise DAU-sicher machen willst, nicht im Klartext, sondern als Hash.



  • Danke für deine Antwort. Natürlich will ich einen sinnvollen Passwortschutz für eine sinnvolle Software programmieren 🙂



  • Dann solltest du wissen, dass es praktisch* nicht möglich ist, einen absolut sicheren Passwortschutz für eine Software zu programmieren, wenn der Anwender Zugang zum Programm-Abbild hat. Mit Passwortschutz ist hierbei gemeint, dass man die Software nur nutzen kann, wenn man ein Passwort dafür kennt; also z. B. ein Key für ein PC-Spiel.

    Denn wenn ein Bösewicht Zugang zum Algorithmus bzw. zum Programmcode hat - hierbei reicht schon ein Kompilat, das er disassemblieren kann - dann kann er daraus ein hartkodiertes Passwort, die Prüfroutine für Serials (vgl. Keygens) oder andere Verschlüsselungsmethoden "ablesen". Das ist natürlich nicht einfach und kann dem Angreifer mit verschiedenen Techniken stark erschwert werden. Je nachdem wie sehr sich der Aufwand lohnt, wird sich aber früher oder später jemand finden, der es schafft das Programm zu cracken - u. U. sogar indem er Teile des Programms austauscht (vgl. Spiele-Cracks).
    Bei .NET-Programmen ist der Aufwand sogar noch um ein Vielfaches geringer, da der Byte-Code der Assemblies dem ursprünglichen Quellcode stark ähnelt (sofern er nicht durch einen Obfuscator gejagt wurde) und mit Tools einfach eingesehen und verändert werden kann.

    Aber vielleicht willst du ja gar nicht so eine Art von Passwortschutz. Vielleicht willst du ja auch nur sensible Daten vor Manipulation schützen, wie z. B. die Highscore-Datei eines Spiels oder die Datei einer Telefonbuch-Verwaltung.

    Wenn niemand außer deinem Programm Daten lesen/verändern können soll (der "Highscore-Fall"), wirst du auf ähnliche Probleme wie oben beschrieben stoßen. Denn irgendwie muss sich ja das Programm das Passwort für die Datei merken - sei es in seiner Executable oder in irgendeinem anderen Speicher. Auf all das kann ein Anwender zumindest mit Admin-Rechten Zugriff haben, wenn er sich Mühe gibt und das entsprechende Know-How hat.

    Beim "Telefonbuch-Fall" stehen die Chancen schon besser, denn hier will man meistens Daten eines Benutzers vor anderen Benutzern schützen. Das heißt man erfasst prinzipiell vom Benutzer ein Passwort, mit dem man die sensiblen Daten verschlüsselt und speichert das Passwort nicht ab. Dadurch ist der Benutzer der einzige, der die Daten entschlüsseln kann. Wenn das Programm nun wieder das Telefonbuch lädt, muss der Benutzer wieder das Passwort eingeben, damit es die Daten entschlüsseln kann.

    Für Login-Systeme gibt es auch noch die Möglichkeit, Passwort-Hashes in einer Datenbank zu speichern. Das funktioniert aber nur gut, wenn der Anwender nicht die Möglichkeit hat, das Programm zu manipulieren - z. B. bei einer Online-Anwendung (Web-Shop, Browser-Game, Social-Network, usw.). Aber auch hier kann es - je nach Stärke der Hashes - möglich sein, ein zugrunde liegendes Passwort zu ermitteln (Stichwort Rainbow-Tables), wenn einem Bösewicht die Benutzerdaten inkl. Hash in die Hände geraten.

    Aber vielleicht hast du ja was wiederum anderes vor? Kannst ja mal beschreiben, was dein Plan ist.

    😉 Ob es unter den gegebenen Bedingungen auch theoretisch unmöglich ist, kann ich dir jetzt nicht sagen. Such mal hier im Forum nach dem Thema - das kommt öfter vor.



  • Danke für deine detailierte Antwort. Aber mein Plan ist, ein App zu programmieren. In diesem App gibt es ein Einstellungen-Menü. Man darf in das Menü nicht rein, ohne eine erfolgreiche Passwort-Eingabe.
    Gibt man das Passwort richtig ein, soll man in der Lage sein, die Einstellungen zu ändern und eventuell ein neues Passwort statt das alte zu legen.

    Meine Frage ist, wie kann den App so programmieren, dass er das alte Passwort löscht und ein neues definiert, wenn sich der Benutzer so was wünscht und zwar nachdem der Benutzer, das alte Passwort richtig eingegeben hat??!



  • Deine Frage ist zu allgemein. An welcher Stelle hast du denn genau Probleme? Beim Erfassen der Passwörter? Beim Vergleichen? Beim Speichern der Daten bzw. Passwörter?



  • Mein Problem ist beim Speichern eines neuen Passwortes bzw der Daten und beim Erfassen ein neues Passwort natürlich 🙂



  • Wie wäre es mit dem Streamwrtier?
    Ist im using system IO; vorhanden
    http://www.dotnetperls.com/streamwriter
    http://www.dotnetperls.com/streamreader



  • Also, der streamwriter speichert du die eingabe, daneben kannst du das ganze mit dem streamReader das ganze abrufen.

    Hab mich 1/2 Jahr mit c# beschäftigt 😉

    PS: Ich wollte dir den Text "vorlegen", aber das ist hier kein Hausaufgaben Forum, also hier ist ein Video: http://www.youtube.com/watch?v=QKGjWMlba9s&list=HL1354540238&feature=mh_lolz



  • Und alles geklappt


Anmelden zum Antworten