Welkom, Gast. Je bent niet ingelogd.

PHP Uniek

Basjee
Octo
Geplaatst op: 10 May 2007, 17:30
PimpCoins: 0
💸+
Bewerken Quote

Hey,
Ik wilde vragen of

1
2
3
<?
echo md5(time());
?>

altijd uniek is?

Ik kan evt. ook gebruik maken van

1
2
3
<?
echo md5(microtime());
?>

of

1
2
3
<?
echo crc32(md5(time()));
?>

Het moet een unieke 'code' worden, maakt niet uit hoelang.

Thenks

Edit

1
2
3
4
<?
$id12 = chr(rand()) . chr(rand());
$uniekid = md5($id12);
?>

Is denk ik helemaal uniek, toch?

[Laatst bewerkt door Basjee op donderdag 10 mei 2007, om 17:36]
Saven
admin
Geplaatst op: 10 May 2007, 17:36
PimpCoins: 0
💸+
Bewerken Quote

Nja niet altijd he, stel nou dat 2 personen op precies dezelfde tijd die code opvragen tja

en dan heb je nog te maken met md5 collisions

Basjee
Octo
Geplaatst op: 10 May 2007, 17:40
PimpCoins: 0
💸+
Bewerken Quote

Saven schreef:

Nja niet altijd he, stel nou dat 2 personen op precies dezelfde tijd die code opvragen tja

en dan heb je nog te maken met md5 collisions


Inderdaad..
En mijn edit?

Lennard
?
Geplaatst op: 10 May 2007, 18:44
PimpCoins: 0
💸+
Bewerken Quote

Je kunt 't ook zo doen:

1
2
3
<?php
$code = md5(microtime().rand(0,1000000));
?>

Dan heb je de kans dat er twee dezelfde personen op precies dezelfde tijd de pagina opvragen x de kans 1 / 1.000.000; héél erg klein dus.

Als je dit:

1
2
3
4
<?php
echo microtime().'<br />';
echo microtime();
?>

uitvoert krijg ik 'al' een verschil van 0.00012 secondes.

(En een single-core systeem kan maar één berekening tegelijk uitvoeren, dus kunnen er - volgens mij - al geen twee dezelfde microtimes() zijn - maar dat weet ik niet zeker enzo. )

De kans op een collision lijkt me ook heel erg klein, omdat er - denk ik - geen ('kleine') getallen zijn waarbij de md5 hash ervan allebei hetzelfde zijn...

Thaan
Aka "Gerwin"
moderator
Geplaatst op: 10 May 2007, 18:51
PimpCoins: 0
💸+
Bewerken Quote

Zolang je niks voor NASA of een andere belangrijke organisatie script is dat uniek genoeg ja, niet moeilijk gaan doen en gewoon dat eerste gebruiken.

Saven
admin
Geplaatst op: 10 May 2007, 18:58
PimpCoins: 0
💸+
Bewerken Quote

Lennard schreef:

Je kunt 't ook zo doen:

[...]
uitvoert krijg ik 'al' een verschil van 0.00012 secondes.

(En een single-core systeem kan maar één berekening tegelijk uitvoeren, dus kunnen er - volgens mij - al geen twee dezelfde microtimes() zijn - maar dat weet ik niet zeker enzo. )

De kans op een collision lijkt me ook heel erg klein, omdat er - denk ik - geen ('kleine') getallen zijn waarbij de md5 hash ervan allebei hetzelfde zijn...


Dan kun je beter dit doen:
1
2
3
4
5
<?php
$microtime = microtime();
$microtime = str_replace(' ', '', $microtime);
$microtime = $microtime.mt_rand(10000000,999999999999);
?>

met md5 heb je grotere kans dat hij niet uniek is

Basjee
Octo
Geplaatst op: 10 May 2007, 20:21
PimpCoins: 0
💸+
Bewerken Quote

1
2
3
4
5
6
$uniekid = md5(time() . rand(1,9999) . $_SERVER['REMOTE_ADDR']);
$uniek = $uniekid . mt_rand(10000000,999999999999);
$uniek = str_replace('-', '', $uniek);
$uniek = str_replace('.', '', $uniek);
$uniek = str_replace(' ', '', $uniek);
echo $uniek;

Ik denk dat ik deze ga gebruiken

Jaapiej
krek
Geplaatst op: 10 May 2007, 20:34
PimpCoins: 0
💸+
Bewerken Quote

Basjee schreef:

[...]

Ik denk dat ik deze ga gebruiken


Die lijkt me inderdaad wel vrij uniek.

Basjee
Octo
Geplaatst op: 10 May 2007, 21:26
PimpCoins: 0
💸+
Bewerken Quote

Maar er is nog een kans dat hij hetzelfde is.
Als er 2 computers op hetzelfde netwerk zijn, die allebei op precies dezelfde tijd de pagina bezoeken en dan ook nog eens geluk hebben dat de rand() hetzelfde is.

Kan dit uberhaupt ooit worden voorkomen?

Infinite
Geplaatst op: 10 May 2007, 21:28
PimpCoins: 0
💸+
Bewerken Quote

Basjee schreef:

Maar er is nog een kans dat hij hetzelfde is.
Als er 2 computers op hetzelfde netwerk zijn, die allebei op precies dezelfde tijd de pagina bezoeken en dan ook nog eens geluk hebben dat de rand() hetzelfde is.

Kan dit uberhaupt ooit worden voorkomen?


Is dit soms voor de overheid ofzo?
Lijkt me nogal onzinnig zo uitgebreid.

Lennard
?
Geplaatst op: 10 May 2007, 21:39
PimpCoins: 0
💸+
Bewerken Quote

Basjee schreef:

Maar er is nog een kans dat hij hetzelfde is.
Als er 2 computers op hetzelfde netwerk zijn, die allebei op precies dezelfde tijd de pagina bezoeken en dan ook nog eens geluk hebben dat de rand() hetzelfde is.

Kan dit uberhaupt ooit worden voorkomen?


Doe gewoon md5(microtime()).

Maarten
Geplaatst op: 10 May 2007, 21:47
PimpCoins: 0
💸+
Bewerken Quote

Lennard schreef:

[...]
Doe gewoon md5(microtime()).

Zit ie allemaal moeilijk te doen komt onze goede Lennard met een simpel antwoord

Thaan
Aka "Gerwin"
moderator
Geplaatst op: 10 May 2007, 22:09
PimpCoins: 0
💸+
Bewerken Quote

Maarten schreef:

[...]
Zit ie allemaal moeilijk te doen komt onze goede Lennard met een simpel antwoord

Euh, zie mijn post. Sterker nog, MD5 erover is alleen nog maar bullshitterig, omdat die een collision kan krijgen, alleen time() zal nooit een collision krijgen, omdat die alleen maar groter wordt met elke seconde.

Lennard
?
Geplaatst op: 11 May 2007, 07:47
PimpCoins: 0
💸+
Bewerken Quote

Thaan schreef:

[...]
Euh, zie mijn post. Sterker nog, MD5 erover is alleen nog maar bullshitterig, omdat die een collision kan krijgen, alleen time() zal nooit een collision krijgen, omdat die alleen maar groter wordt met elke seconde.

Dan issie wel spatievrij enzo.
De kans dat je een collision krijgt met 2 md5(microtime()'s is net zo groot (ongeveer ) als dat je de loterij wint als de aarde ontploft.

Saven
admin
Geplaatst op: 11 May 2007, 12:27
PimpCoins: 0
💸+
Bewerken Quote

Lennard schreef:

[...]
Dan issie wel spatievrij enzo.
De kans dat je een collision krijgt met 2 md5(microtime()'s is net zo groot (ongeveer ) als dat je de loterij wint als de aarde ontploft.

doe dan wat ik zei, de spaties eruithalen
1
2
3
4
5
6
<?php

$id = microtime().microtime();
$id = str_replace(' ', '', $id);

?>

Lennard
?
Geplaatst op: 11 May 2007, 12:41
PimpCoins: 0
💸+
Bewerken Quote

/care; doe wat je wilt.

📫

Nieuw privébericht

🔥

Registreren


Login