PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : *SOLVED* C# - Passwort Schutz



Viper.aT
04.12.2008, 16:30
Hallo
Habe folgendes Problem: Ich möchte mein Programm mit einem Passwort schützen. Und zwar habe ich mir das ganze so vorgestellt wenn man die .exe Datei startet sucht sie in einer Datei nach einem string, wenn dieser enthalten ist öffnet sich ein Fenster das einem zum Passwort eingeben auffordert. Ist das Passwort richtig macht das Programm in der Program.cs Datei weiter und startet die Hauptanwendung. Ist es falsch schließt sich das Programm.
Hier Auszüge aus dem Source

Program.cs

static class Program
{

/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
FileStream myFileStream = new FileStream(@"./settings.ini", FileMode.OpenOrCreate, FileAccess.Read);
StreamReader myStreamReader = new StreamReader(myFileStream);
string sEinstellungen = myStreamReader.ReadToEnd();
myFileStream.Close();

if (sEinstellungen.IndexOf("Passwort_Enabled = 1") > -1)
{
// Legt ein neues Objekt von frmPasswort mit dem Namen myfrmPasswort an
frmPasswort myfrmPasswort = new frmPasswort();
// Zeigt das Fenster an
myfrmPasswort.ShowDialog();
}

Application.Run(new Hauptanwendung());

}

}


frmPasswort.cs


public partial class frmPasswort : Form
{
public frmPasswort()
{
InitializeComponent();
}

private void ok_Click(object sender, EventArgs e)
{
string EncryptedPasswort1 = "";
string EncryptedPasswort2 = "";
FileStream myFileStream = new FileStream(@"./settings.ini", FileMode.OpenOrCreate, FileAccess.Read);
StreamReader myStreamReader = new StreamReader(myFileStream);
// settings.ini Datei wird eingelesen
EncryptedPasswort1 = myStreamReader.ReadToEnd();
// Eingegebenes Passwort wird verschlüsselt und in EncryptedPasswort2 gespeichert
EncryptedPasswort2 = Encrypt(Passwort.Text);
// Es wird überprüft ob der verschlüsselte string in EncryptedPasswort1 enthalten ist
if (EncryptedPasswort2.IndexOf(EncryptedPasswort1) > -1)
{

}
else
{
Application.Exit();
}

}
}

Hoffe ihr könnt mir helfen
MFG Viper.aT

l0dsb
04.12.2008, 16:45
Deine .ini speichert das mit einem Hashalgorithmus gehashte Passwort. Du hashst die Eingabe und vergleichst dann beide Hashes, so kann man das richtige Passwort nicht aus dem Code lesen (wohl aber den Jump patchen).

Weiß nicht genau, was dein Problem ist, hattest keine richtige Frage formuliert. ;)

Viper.aT
04.12.2008, 16:54
Ok sry^^ Mein Problem ist folgendes ich will wenn das Passwort übereinstimmt (auch wenn es das jetzt aus noch nicht tun sollte) er den code in der program.cs datei weiter ausführt und somit die Hauptanweudng startet. Wenn es falsch ist soll die Anwednung geschlossen werden.
Gibt es da irgendeine Möglichkeite das durchzuführen
Bin dankbar für alle Tipps

Darkraiser
04.12.2008, 17:00
einfach eine Funktion reinhauhn mit einer IF abfrage??? oder ich hab deine Frage immer noch nicht verstanden ;)

mfg

Viper.aT
04.12.2008, 17:04
*heul*^^ Ist es irgendwie möglich von der frmPasswort.cs in die Program.cs Datei z.B Variablen zu übergeben damit ich der Program.cs sagen kann was sie machen soll( Also Hauptanwendung starten oder das Programm beenden)?^^

Steav
04.12.2008, 17:08
Ja, Stichwort: DialogResult

Du machst aus

myfrmPasswort.ShowDialog();

Folgendes:

DialogResult Ergebnis = myfrmPasswort.ShowDialog();



und aus


if (EncryptedPasswort2.IndexOf(EncryptedPasswort1) > -1)
{

}
else
{
Application.Exit();
}


Folgendes:

if (EncryptedPasswort2.IndexOf(EncryptedPasswort1) > -1)
{
this.DialogResult = DialogResult.Ok;
}
else
{
this.DialogResult = DialogResult.Cancel;

}



Dann kannst du in Programm.cs abfragen:


if (Ergebnis == DialogResult.Ok)
// TODO: StarteProgramm
else
// TODO: Beende Programm




PS: Habe den Code nicht in der IDE geschrieben, sondern aus dem Kopf und ohne Intellisens im Forum-fenster. Könnten also Tipfehler drin sein.

Darkraiser
04.12.2008, 17:10
meinste vllt einfach sowas



Password.text1.text = Program.text2.text;


so inner art sollte es auch mit Variablen gehen ;)

Viper.aT
04.12.2008, 17:24
Danke an alle Problem ist dankt Steav gelöst und an Darkraiser, dass funktioniert in diesem Falle leider nicht, trotzdem Danke :D
MFG Viper.aT