webForumDet fria alternativet

Slumpa ut lösenord

.NETur .NET

13 svar · 684 visningar · startad av Arne

Medlem sedan maj 2000267 inlägg
Frågan#1

Jag har en registrerings applikation varav jag vill slumpa ut lösenordet vid registreringen som sedan skickas till dom via e-post.
Men slumpen kan ju göra så att samma lösenord dyker upp igen, så man måste ju kolla om lösenordet används innan det skickas. Är det upptaget måste man köra det igen?

Något bra tips hur denna kod bör byggas upp?

Medlem sedan juli 20011 129 inlägg
#2

Ignorera detta inlägg... :r

Medlem sedan juni 20011 732 inlägg
#3

Är ni samma personer/känner ni varandra eller varför ska detta inlägg ignoreras? Kanske någon annan vill ha svar på just denna fråga så jag tycker diskussionen ska stå kvar.

Personligen tycker inte jag att unika lösenord är extremt viktigt i normala fall, om vi utgår från att lösenordet är kopplat till ett specifikt användarnamn. Man bör dessutom kanske ge användaren möjlighet att byta lösenordet mot något annat och då går det ju inte att spärra lösenord som redan finns (för då vet ju personen att de har hittat någon annans lösenord!).

Medlem sedan juli 20011 129 inlägg
#4

Jag menade inte att tråden skulle ignoreras, utan bara mitt inlägg, detta p.g.a. att jag skrev en lösning... i fel språk nämligen ASP, inte .NET.

Men jag håller med, att slumpa ut samma lösenord 2 ggr av 10 000 känns inte så farligt, mest för att användarnamnen lär väl skilja sig. Har du en 6-8 tecken med alfabetets alla bokstäver och stora samt små bokstäver så blir det inte ofta den slumpar fram samma lösenord.

Medlem sedan maj 2000267 inlägg
#5

Hmmm...
Kanske jag är för nogrann.

Statistiskt sett hur ofta dyker samma lösenord upp i en:

<%
Passwordeller = ""

Randomize

For i = 1 to 6
intNum = Int(10 * Rnd + 48)
intBig = Int(26 * Rnd + 65)
intSmall = Int(26 * Rnd + 97)
intRand = Int(3 * Rnd + 1)

Select Case intRand
Case 1
delPasseller = Chr(intNum)
Case 2
delPasseller = Chr(intBig)
Case 3
delPasseller = Chr(intSmall)
End Select

Passwordeller = Passwordeller & delPasseller

Next

response.write(Passwordeller & "<br>")
%>

Hur tänkte du lösningen i asp? Jag är inte bunden att det ska vara asp.net.

Medlem sedan juni 20011 732 inlägg
#6

Koplik: Ah, det förstås, sorry. :)

Medlem sedan juli 20011 129 inlägg
#7

Ok, då kör jag igen ;)

      Function GeneratePass(length)
        sPassw59 = "ABCDEFGHIJKLMNOPQRSTUVXYZ1234567890abcdefghijklmopqrstuvxyz"
  
        Randomize()
        locVar = ""
        For cLoop = 1 To Length
          RndNmbr = Round((Rnd() * 58) +1, 0) 
          locVar = locVar & Mid(sPassw59, RndNmbr, 1)
        Next
        GeneratePass = locVar
      End Function

Det här är hur jag har gjort min generator, nu kommer mitt förslag på hur man kollar så att någon annan inte har samma, inte testat, men simpelt

  
  StillDoLoop = True

  Do While StillDoLoop
    'Genererar ett lösenord på 8 tecken
    Password = GeneratePass(8)

    SQLStmt = "Select Password From Users Where Password = '"& Password &"' "  
    Set RS = Conn.Execute(SQLStmt)

    If RS.EOF Then
      StillDoLoop = False
    End If

    Set RS = Nothing
  Loop

Bara ett förslag. Generatorn är jag lite stolt över dock, enkelt att lägga till siffror om man vill ha det också.

Medlem sedan maj 2001329 inlägg
#8

Snygg generator, man kanske får göra en copy paste på den :)

Kan hålla med om att testa om lösenordet redan finns är lite överkurs, men det kanske är bra (så länge du inte gör detta när användarna ska skriva in nya lösen ord..av förståliga skäl)

Nåja är inte därför jag skriver utan hmm, host host, du sparar väl för gudsskull inte lösenorden i klartext i databasen?

använd någon funktion till att kryptera den innan du stoppar in dem där tex

FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5")

Medlem sedan juli 20011 129 inlägg
#9

*host*

Medlem sedan apr. 20012 266 inlägg
#10

Ett annat sätt att generera lösenord på som kan vara användbart ibland är:

string GeneratePassword()
{
	byte[] bytes = new byte[10];

	Random rand = new Random(unchecked((int)DateTime.Now.Ticks));
	rand.NextBytes(bytes);

	StringBuilder password = new StringBuilder();
	foreach(byte b in bytes)
		password.Append(b.ToString("X2"));

	return password.ToString();
}
Medlem sedan feb. 20032 027 inlägg
#11

Arne skrev:

Hmmm...
Kanske jag är för nogrann.

Statistiskt sett hur ofta dyker samma lösenord upp i en:

<%
Passwordeller = ""

Randomize

For i = 1 to 6
intNum = Int(10 * Rnd + 48)
intBig = Int(26 * Rnd + 65)
intSmall = Int(26 * Rnd + 97)
intRand = Int(3 * Rnd + 1)

Select Case intRand
Case 1
delPasseller = Chr(intNum)
Case 2
delPasseller = Chr(intBig)
Case 3
delPasseller = Chr(intSmall)
End Select

Passwordeller = Passwordeller & delPasseller

Next

response.write(Passwordeller & "<br>")
%>

Hur tänkte du lösningen i asp? Jag är inte bunden att det ska vara asp.net.

Jag försöker lägga in koden i en variabel som heter password och som svar får jag "Ditt lösenord är True"

password=Passwordeller = ""

Randomize

For i = 1 to 6
intNum = Int(10 * Rnd + 48)
intBig = Int(26 * Rnd + 65)
intSmall = Int(26 * Rnd + 97)
intRand = Int(3 * Rnd + 1)

Select Case intRand
Case 1
delPasseller = Chr(intNum)
Case 2
delPasseller = Chr(intBig)
Case 3
delPasseller = Chr(intSmall)
End Select

Passwordeller = Passwordeller & delPasseller

Next

response.write(Passwordeller & "<br>")
Medlem sedan juni 200032 969 inlägg
#12

Lite många = här:

password=Passwordeller = ""
Medlem sedan aug. 200136 inlägg
#13

Är det "unikheten" som är viktig kan du alltid köra

string sPassword = System.Guid.NewGuid().ToString();

Kan man leva med att lösenordet ser ut ungefär som

b3a5f99a-c923-48e3-a710-7f91c87eea45

så är detta garanterat unikt i alla fall.

Medlem sedan juli 2004206 inlägg
#14

Du kan väl i det slumpade passordet infoga dagens datum+tid på ett snyggt och inte uppenbart sätt. Datum+Tid är ju något som bekant inte återkommer.

Tycker du att det är dumt att det går att klura ut att det finns ett datum instoppat i lösenordet så kan du hasha det (md5 kanske).

datum+tid+slump+salt skickas till md5-hashfunktionen.

132 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)