bjartesi Skrevet 6. april 2009 Del Skrevet 6. april 2009 Jeg skal lage et program der det er forhåndsdefinert en del brukere og der i blant en administartor. Alle brukere skal kunne logge seg inn v.h.a brukernavn og passord. Vanlige brukere skal bare få en melding om at en nå er logget inn. Administratoren skal få opp en oversikt over aller brukernavn med passord. Det skal brukes index/collection og jeg skal lage det i GUI (WPF). Noen som har noen tips for å komme i gang med denne oppgaven? Lenke til kommentar
GeirGrusom Skrevet 6. april 2009 Del Skrevet 6. april 2009 Hva slags database tenker du å bruke? (hvis noen) Er dette et rent lokalt system? Det er viktig når en arbeider med passord, å hashe eller kryptere disse, det er også ganske viktig at du buker sikre metoder (som SecureString) for å arbeide med dem. Lenke til kommentar
bjartesi Skrevet 6. april 2009 Forfatter Del Skrevet 6. april 2009 Hva slags database tenker du å bruke? (hvis noen)Er dette et rent lokalt system? Det er viktig når en arbeider med passord, å hashe eller kryptere disse, det er også ganske viktig at du buker sikre metoder (som SecureString) for å arbeide med dem. Det skal i utgangspunktet ikke være rettet mot noen database. Jeg ser for meg at brukernavn og passord for letthetens skyld blir definert i koden. Ja det er en ren lokal prototype. Lenke til kommentar
GeirGrusom Skrevet 6. april 2009 Del Skrevet 6. april 2009 Du definerer en klasse som skal inneholde informasjon om en bruker, og eventuelt en egen klasse for tilgangsnivå. Hvis det ikke skal være komplisert kan også tilgangsnivå å være en enum. Er sikkerhet viktig? Lenke til kommentar
bjartesi Skrevet 6. april 2009 Forfatter Del Skrevet 6. april 2009 Du definerer en klasse som skal inneholde informasjon om en bruker, og eventuelt en egen klasse for tilgangsnivå. Hvis det ikke skal være komplisert kan også tilgangsnivå å være en enum. Er sikkerhet viktig? Nei det skal ikke være komplisert og sikkerheten er ikke viktig. Lenke til kommentar
Wattengård Skrevet 7. april 2009 Del Skrevet 7. april 2009 Dette høres ut som en tidlig oppgave i .NET-101 Jeg antar at poenget er at du skal lære deg å bruke lister og hasher. Noen tips for å komme igang: Se på System.Collection.Hashtable Evt. lag en List med KeyValuePair objekter. Lagre brukernavnet i en global variabel, og bare sjekk om "brukernavn == 'admin'" når brukeren forsøker å gjøre noe administratorisk WPF-biten klarer du nok selv... Jeg er mer WinForms så jeg kan ikke hjelpe deg der uansett. -C- Lenke til kommentar
bjartesi Skrevet 7. april 2009 Forfatter Del Skrevet 7. april 2009 Dette høres ut som en tidlig oppgave i .NET-101 Jeg antar at poenget er at du skal lære deg å bruke lister og hasher. Noen tips for å komme igang: Se på System.Collection.Hashtable Evt. lag en List med KeyValuePair objekter. Lagre brukernavnet i en global variabel, og bare sjekk om "brukernavn == 'admin'" når brukeren forsøker å gjøre noe administratorisk WPF-biten klarer du nok selv... Jeg er mer WinForms så jeg kan ikke hjelpe deg der uansett. -C- Ja det er nok det som er poenget...en skal kunne liste opp alle brukere med tilhørende passord og dato for når passordet må endres. Litt usikker på hvordan jeg skal liste ut innholdet og hvordan jeg skal gjøre innloggingen. Jeg for min del liker best WinForms også...så det er mulig jeg bruker det. Fant ikke passwordbox i Winforms? Lenke til kommentar
GeirGrusom Skrevet 7. april 2009 Del Skrevet 7. april 2009 Er ikke hashtable en treg versjon av Dictionary<TKey, TValue>? Lenke til kommentar
Wattengård Skrevet 7. april 2009 Del Skrevet 7. april 2009 Ja, Dictionary ja... Lenge siden jeg har brukt noe annet enn List Har ikke Textbox en "password character" attributt eller noe slik med Winforms? -C- Lenke til kommentar
HDSoftware Skrevet 8. april 2009 Del Skrevet 8. april 2009 Hva slags database tenker du å bruke? (hvis noen)Er dette et rent lokalt system? Det er viktig når en arbeider med passord, å hashe eller kryptere disse, det er også ganske viktig at du buker sikre metoder (som SecureString) for å arbeide med dem. HASH er greit, men ikke til å bli lagret. Man kan ikke stole på at en HASH verdi i dag er den samme i morgen og derfor er det ikke mulig å bruke denne i databaser. For meg er en HASH kunn brukandes til sammenligning mellom to entiteter som er beregnet på samme maskin. Lenke til kommentar
steingrim Skrevet 8. april 2009 Del Skrevet 8. april 2009 Tull. De fleste hashing-algoritmene er entydige og deterministiske og kan trygt lagres. Enveis-hashing av passordet før det lagres i databasen er veldig, veldig, veldig vanlig. Lenke til kommentar
GeirGrusom Skrevet 9. april 2009 Del Skrevet 9. april 2009 Jeg bruker SHA256 i en database for å hashe passord, og det funker fint det. Lenke til kommentar
bjartesi Skrevet 16. april 2009 Forfatter Del Skrevet 16. april 2009 Da har jeg begynt litt på Brukeradministrasjonsprogrammet mitt og har laget følgende kode: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Brukeradmin { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void ok_knapp_Click(object sender, EventArgs e) { if(brukernavn_boks.Text == "Admin") { if (passord_boks.Text == "1234") { MessageBox.Show("Du er pålogget som " + brukernavn_boks.Text); } else { MessageBox.Show("Ugyldig passord"); } } else { MessageBox.Show("Ugyldig brukernavn"); } } } } Det jeg lurer på er hvordan en kan få laget hashtable slik at en kan sjekke opp mot mange ulike brukere med tilhørende passord? Jeg har kun laget en prototype med Admin som brukernavn. Lenke til kommentar
GeirGrusom Skrevet 16. april 2009 Del Skrevet 16. april 2009 Jeg regner med at det bare skal være helt enkelt. Du kan bruke Dictionary<string, string> user_list; For å sjekke om passordet er riktig, kan du gjøre følgende: string passord = ""; if(user_list.TryGetValue(brukernavn_boks.Text, out passord) && passord_boks.Text == passord) MessageBox.Show("Du er pålogget som " + brukernavn_boks.Text); Det koden gjør, er først å sjekke om brukeren finnes, dersom brukeren finnes, hentes passordet, og det blir sjekket mot det som er skrevet i passord-boksen. Lenke til kommentar
bjartesi Skrevet 16. april 2009 Forfatter Del Skrevet 16. april 2009 Jeg regner med at det bare skal være helt enkelt.Du kan bruke Dictionary<string, string> user_list; For å sjekke om passordet er riktig, kan du gjøre følgende: string passord = ""; if(user_list.TryGetValue(brukernavn_boks.Text, out passord) && passord_boks.Text == passord) MessageBox.Show("Du er pålogget som " + brukernavn_boks.Text); Det koden gjør, er først å sjekke om brukeren finnes, dersom brukeren finnes, hentes passordet, og det blir sjekket mot det som er skrevet i passord-boksen. Det begynner å ligne noe nå men dersom jeg skal ha med tidspunkt for når en må skifte passord i tabellen, hva må en da gjøre? Jeg prøvde å bare legge til datatime slik: Dictionary<string, string, datetime> user_list; Det gikk ikke.... Lenke til kommentar
GeirGrusom Skrevet 16. april 2009 Del Skrevet 16. april 2009 Nei. Da må du nesten lage en egen klasse som du setter isteder for string på passord-siden Dictionary<string, MyUserInfoClass> user_list; Lenke til kommentar
bjartesi Skrevet 16. april 2009 Forfatter Del Skrevet 16. april 2009 Nei.Da må du nesten lage en egen klasse som du setter isteder for string på passord-siden Dictionary<string, MyUserInfoClass> user_list; Prøver på det nå men er får ikkje helt til å legge inn data i passordtabellen i klassen Passord: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Brukeradmin { class Passord { Dictionary<string, string> passordtabell; passordtabell.Add("123", "01.01.10"); } } Lenke til kommentar
GeirGrusom Skrevet 16. april 2009 Del Skrevet 16. april 2009 Det er fordi du misforstod poenget public class MittProgram { private Dictionary<string, MinDataKlasse> bruker_liste; } public class MinDataKlasse { private string m_passord; private DateTime m_forrige_endring; public string Passord { get { return m_passord; } set { m_passord = value; m_forrige_endring = DateTime.Now; } } public DateTime LastPasswordChange { get { return m_forrige_endring; } } } Nå vil jeg også anbefale mot å bruke norse navn på variabler, funksjoner osv. All programmering bør foregå på engelsk. I verste fall burde kun kommentarer være Norske. Lenke til kommentar
Wattengård Skrevet 17. april 2009 Del Skrevet 17. april 2009 Pluss at istedet for 2 IF's kan du bruke logiske operatorer... Typ if (txtBrukernavn.Text == "admin" && txtPassord.Text == "12345") { SUCCESS! } -C- Lenke til kommentar
HDSoftware Skrevet 17. april 2009 Del Skrevet 17. april 2009 Tull. De fleste hashing-algoritmene er entydige og deterministiske og kan trygt lagres. Enveis-hashing av passordet før det lagres i databasen er veldig, veldig, veldig vanlig. Tull??? Hvorfor er du så påståelig?? Annbefaler deg å lese litt om HASH i MSDN. Der står det ganske klart at dette er gjenstand for nettop dette. Dessuten har jeg selv prøvd dette. Jeg har brukt .NET sine egne HASH metoder for å lage HASH verdier av passord, og lagret det i en SQL tabell. Når jeg fra en Vista64 bit maskin genererer passord så klarer ikke en bruker på en XP32 maskin å logge inn. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå