[Java] Uniek wachtwoord genereren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ObiTewodros
  • Registratie: April 2011
  • Laatst online: 05-04 22:22
Ik kan met math.random wel een wachtwoord genereren maar dat is dan niet gegarandeerd uniek.

Ik kan er mischien dan iets erachter plakken bv gebruikersnaam, het zou helemaal goed zijn als ik gewoon een java een unieke wachtwoord kan laten genereren.

Mijn java programmeer kennis is 2 weken, ik zou het dus op prijs stellen als jullie het simpel houden.

Hoe krijg dit voor elkaar?

Wat ik zelf geprobeerd heb:

1: Een array ''oneindige'' array maken en die vullen met elke nieuw gegenereerde wachtwoord, en elke nieuwe wachtwoord vergelijken met de wachtwooorden in de array. Dit is natuurlijk niet efficient en traag.

2: Iets anders plakken achter de met mat.random gegenereerde wachtwoord. Dit werkt maar vind ik niet zo mooi.

3: Erg ingewikkeld voor een simpele probleem, maar een database aan gemaakt mbv mysql en .................

Hoe zouden jullie het oplossen?

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Wat maakt het uit als twee op de tig miljard wachtwoorden matchen? (waarbij ik aanneem dat je toch wel een aardig aantal tekens gebruikt in je wachtwoorden, waardoor je al snel aan een heleboel verschillende mogelijke combinaties komt.) Gegarandeerd uniek bestaat niet met een prng.

[ Voor 32% gewijzigd door CodeCaster op 30-04-2011 10:59 ]

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

  • BèR
  • Registratie: Mei 2002
  • Laatst online: 20-11-2022
Ik zou niet perse unieke wachtwoorden willen :) Pincodes zijn ook niet uniek en toch relatief veilig :) Random is meer dan genoeg in de meeste toepassingen.

Acties:
  • 0 Henk 'm!

  • ObiTewodros
  • Registratie: April 2011
  • Laatst online: 05-04 22:22
Ok het is misschien niet noodzakelijk, maar toch wel mooi als het mij lukt.

Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Laatst online: 24-04 15:45
Ik wil zelfs beweren dat het onveiliger is om unieke wachtwoorden te willen, omdat dit betekend dat je de wachtwoord of opslaat of dat je een voorspelbare factor in brengt. Als ze volledig random worden gegenereerd is het volgens mij veel veiliger en hoef je alleen een hash+seed op te slaan.

ps. Als je wachtwoorden genereert van 8 tekens lang met kleine letters, hoofdletters en cijfers heb je al (26+26+10)8 = 2.1 x 1014 mogelijkheden. De kans op dubbelen is dan ook al best klein.

Acties:
  • 0 Henk 'm!

  • ObiTewodros
  • Registratie: April 2011
  • Laatst online: 05-04 22:22
Hoe kan ik een random string aanmaken dan?

Wat ik nu doe is gewoon een random nummer genereren en met if else elke letter toekennen aan een cijfer. Bestaat er een betere manier hiervoor?

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

NeutraleGast schreef op zaterdag 30 april 2011 @ 10:59:
Ok het is misschien niet noodzakelijk, maar toch wel mooi als het mij lukt.
Waarom dan? :)

Maar als je dat echt wilt, kun je dat gewoon ongeveer zo doen:
code:
1
2
3
4
5
6
7
8
9
user = new User();

do 
  password = generatePassword();
  hashedPassword = hashPassword(password, hash);

while (query("select from users where hashedPassword='" + hashedPassword + "'").rowCount > 0)

user.Persist();

Maar dat werkt niet als je per user ook nog een hash hebt, dan moet je dat in de query fiksen.

[ Voor 9% gewijzigd door CodeCaster op 30-04-2011 14:43 ]

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

  • martijn2008
  • Registratie: December 2009
  • Laatst online: 21-08-2022
NeutraleGast schreef op zaterdag 30 april 2011 @ 10:59:
Ok het is misschien niet noodzakelijk, maar toch wel mooi als het mij lukt.
Of diegene die hier reageren het lukt :P
Maar als je alle gebruikte wachtwoorden opslaat en als er dan een nieuw wachtwoord wordt geproduceerd het eerst wordt vergeleken met de database. Niet dat het echt veilig/handig is. Maar hoe groter je het aantal mogelijkheden neemt, hoe kleiner de kans is dat het hetzelfde wordt, maar ik zou er niet van wakker liggen. Het voorbeeld van de pincodes is goed gekozen d:)b

Acties:
  • 0 Henk 'm!

  • mace
  • Registratie: Juni 2003
  • Laatst online: 25-04 09:28

mace

Sapere Aude

NeutraleGast schreef op zaterdag 30 april 2011 @ 11:06:
Wat ik nu doe is gewoon een random nummer genereren en met if else elke letter toekennen aan een cijfer. Bestaat er een betere manier hiervoor?
Oei, leer dat maar meteen af. :)

Je hebt maar 2 weken ervaring zoals je zegt dus ik bedoel dit niet gemeen, maar dat is dus de verkeerde manier. :)

[ Voor 5% gewijzigd door mace op 30-04-2011 11:10 ]


Acties:
  • 0 Henk 'm!

  • Pinooo
  • Registratie: Januari 2007
  • Laatst online: 12-02 21:17
je kunt toch een uniek wachtwoord laten generen + een timestamp en hier een hash overheen gooien? lijkt mij vrij uniek dat iemand op hetzelfde moment een wachtwoord laat genereren en dat je ook nog eens twee dezelfde unieke stings genereerd vanuit je java.

Acties:
  • 0 Henk 'm!

  • ObiTewodros
  • Registratie: April 2011
  • Laatst online: 05-04 22:22
pincode is 4 getallen 0t/m9?

dat is dan 10^4 = 10000 mogelijkheden? laten we als voorbeeld rabobank nemen, daar hebben vast wel meer dan 10000 mensen een rekening toch?

Acties:
  • 0 Henk 'm!

  • mace
  • Registratie: Juni 2003
  • Laatst online: 25-04 09:28

mace

Sapere Aude

NeutraleGast schreef op zaterdag 30 april 2011 @ 11:11:
pincode is 4 getallen 0t/m9?

dat is dan 10^4 = 10000 mogelijkheden? laten we als voorbeeld rabobank nemen, daar hebben vast wel meer dan 10000 mensen een rekening toch?
Klopt, er zijn dus veel mensen met dezelfde pincode. Alleen de kans dat jij en ik exact dezelfde pincode hebben is nog steeds erg klein.

Acties:
  • 0 Henk 'm!

  • ObiTewodros
  • Registratie: April 2011
  • Laatst online: 05-04 22:22
mace schreef op zaterdag 30 april 2011 @ 11:09:
[...]

Oei, leer dat maar meteen af. :)

Je hebt maar 2 weken ervaring zoals je zegt dus ik bedoel dit niet gemeen, maar dat is dus de verkeerde manier. :)
Is het zo beter?

Random r = new Random();

String token = Long.toString(Math.abs(r.nextLong()), 36);
System.out.println(token);

Gewoon google

Acties:
  • 0 Henk 'm!

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 25-04 16:12
Random is eigenlijk niet veilig genoeg hiervoor.
SecureRandom is beter geschikt voor dit soort dingen.

Acties:
  • 0 Henk 'm!

  • apokalypse
  • Registratie: Augustus 2004
  • Laatst online: 11:02
mace schreef op zaterdag 30 april 2011 @ 11:15:
[...]

Klopt, er zijn dus veel mensen met dezelfde pincode. Alleen de kans dat jij en ik exact dezelfde pincode hebben is nog steeds erg klein.
offtopic:
Mwah, valt wel mee. Als je 100 mensen bij elkaar zet is de kans dat 2 dezelfde pincode hebben 50%
:P
FallenAngel666 schreef op zaterdag 30 april 2011 @ 17:05:
Random is eigenlijk niet veilig genoeg hiervoor.
SecureRandom is beter geschikt voor dit soort dingen.
Inderdaad, die zijn daar speciaal voor. Aanrader.

[ Voor 26% gewijzigd door apokalypse op 01-05-2011 00:49 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 25-04 19:05
apokalypse schreef op zondag 01 mei 2011 @ 00:47:
offtopic:
Mwah, valt wel mee. Als je 100 mensen bij elkaar zet is de kans dat 2 dezelfde pincode hebben 50% :P
Nope! 1 - 104! / (104 - 100)! / (104)100 = ~40%.

Verder weet je nog steeds niet welke twee mensen dezelfde pincode hebben, dus heb je niets aan die info.

Acties:
  • 0 Henk 'm!

  • Gimmeabrake
  • Registratie: December 2008
  • Laatst online: 13:14
NeutraleGast schreef op zaterdag 30 april 2011 @ 11:17:
[...]
String token = Long.toString(Math.abs(r.nextLong()), 36);
System.out.println(token);
Waarom de absolute waarde? Is het getal niet standaard al positief?

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 25-04 10:37

Matis

Rubber Rocket

gerrymeistah schreef op zondag 01 mei 2011 @ 14:58:
[...]
Waarom de absolute waarde? Is het getal niet standaard al positief?
Returned een long, welke volgens mij zowel positief als negatief kan zijn.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Gimmeabrake
  • Registratie: December 2008
  • Laatst online: 13:14
Matis schreef op zondag 01 mei 2011 @ 14:59:
[...]

Returned een long, welke volgens mij zowel positief als negatief kan zijn.
8)7 Ik heb niks gezegd.

Trouwens, nog even mijn mening op het uniekheidsgebeuren... Zoals hier boven al gezegd: waarom zou een wachtwoord niet dubbel mogen zijn, en hoe groot is de kans op een dubbel wachtwoord als het bijv. 8 tekens lang is, getallen, letters en leestekens bevat en onderscheid maakt tussen hoofd- en kleine letters? Volgens mij is die kans zo klein dat het te verwaarlozen is...

[ Voor 26% gewijzigd door Gimmeabrake op 01-05-2011 15:06 ]


Acties:
  • 0 Henk 'm!

  • ari3
  • Registratie: Augustus 2002
  • Niet online
Weet niet hoelang de wachtwoorden moeten/mogen zijn, maar een UUID is gegarandeerd uniek, zie http://download.oracle.co...s/api/java/util/UUID.html.


Java:
1
String wachtwoord = UUID.randomUUID().toString();

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 25-04 10:37

Matis

Rubber Rocket

ari3 schreef op zondag 01 mei 2011 @ 15:05:
Weet niet hoelang de wachtwoorden moeten/mogen zijn, maar een UUID is gegarandeerd uniek, zie http://download.oracle.co...s/api/java/util/UUID.html.


Java:
1
String wachtwoord = UUID.randomUUID().toString();
Eclipse genereert die volgens mij ook automagisch indien je een Swing-component introduceert.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Alle historische data domweg in een array stoppen is ook niet praktisch. Zorg dat je het geheel gesorteerd hebt, zodat je sneller kan zoeken of iets al bestaat. Maar zoals eerder gezegd is "uniek" + "random" meestal geen goed idee en overbodig voor wachtwoorden.

Sterker nog, het maakt een zwakte in je software, want een hacker kan alle wachtwoorden opsnoepen, de enige die overblijven zijn wachtwoorden van geldige accounts.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
ari3 schreef op zondag 01 mei 2011 @ 15:05:
Weet niet hoelang de wachtwoorden moeten/mogen zijn, maar een UUID is gegarandeerd uniek, zie
offtopic:
Enkel gegarandeerd uniek volgens de methodes waarin computers uniekheid kunnen garanderen (en dat is simpelweg slecht)

Het is hier niet echt van toepassing, maar als je met grotere synchronisaties etc gaat werken waarbij er meerdere bronnen UUID's aanmaken dan moet je (officieel) een fallback hebben voor het geval dat je dubbele UUID's gaat tegenkomen. Het is dus niet gegarandeerd uniek volgens de normale menselijke logica... (alhoewel ik dacht dat de kans dat de zon over 1 minuut implodeert groter was dan dat je niet-unieke UUID's tegenkomt)

Acties:
  • 0 Henk 'm!

  • mace
  • Registratie: Juni 2003
  • Laatst online: 25-04 09:28

mace

Sapere Aude

Gomez12 schreef op zondag 01 mei 2011 @ 23:48:
[...]

offtopic:
Enkel gegarandeerd uniek volgens de methodes waarin computers uniekheid kunnen garanderen (en dat is simpelweg slecht)

Het is hier niet echt van toepassing, maar als je met grotere synchronisaties etc gaat werken waarbij er meerdere bronnen UUID's aanmaken dan moet je (officieel) een fallback hebben voor het geval dat je dubbele UUID's gaat tegenkomen. Het is dus niet gegarandeerd uniek volgens de normale menselijke logica... (alhoewel ik dacht dat de kans dat de zon over 1 minuut implodeert groter was dan dat je niet-unieke UUID's tegenkomt)
Lang verhaal voor: goed genoeg :P

Acties:
  • 0 Henk 'm!

  • windwarrior
  • Registratie: Januari 2009
  • Laatst online: 12-07-2024

windwarrior

ʍıupʍɐɹɹıoɹ

Ja, maar, uuid's worden ook op een manier gegenereerd, hoe random is dat...

Ik zou er persoonlijk voor kiezen om gewoon met een SecureRandom een wachtwoord te genereren, het is echt wel genoeg, en willekeuriger dan een uuid denk ik

edit: over uniqueness, ik ben het dan met Bèr eens :P

[ Voor 10% gewijzigd door windwarrior op 02-05-2011 09:23 ]

Pagina: 1