Er gaat in principe niets fout, het is alleen een beetje onzinnig om een random hash op die manier te berekenen. PHP kennende is de seed waarmee de interne staat van rand() geïnitialiseerd wordt gebaseerd op de huidige tijd in microseconden en het process id en bovendien maar een 32 bits int. Wat rand() verder retourneert is volledig voorspelbaar, dus er zijn maar een 'paar' hashes mogelijk (orde van grootte van 2
32).
Feanathiel schreef op donderdag 20 september 2012 @ 20:49:
Je plakt hier strings aan elkaar vast. Elk karakter van deze string bestaat slechts uit 10 verschillende waarden (0-9). Er zijn 256 mogelijke waarden voor een enkel karakter, dus in feite gooi je dus 96% van je keyspace per karakter weg.
Dit is nonsens. Hoewel het niet echt een efficiente manier is, is het absoluut niet zo dat je 96% van je keyspace weggooit. De string kent namelijk nog altijd wel 900.000.000
4 verschillende mogelijkheden (als de RNG écht random was), oftewel ~2
118. Een MD5 hash heeft 2
128 mogelijkheden, dus eigenlijk mis je maar 10 bits aan entropie.
Feitelijk gooi je dus 99,9% van je keyspace weg

, maar eigenlijk is dat getal niet zo heel relevant. Wat relevant is is hoeveel je overhoudt. 2
118 is wmb afdoende om brute forcing tegen te gaan

. Nou alleen nog een goede RNG gebruiken. Goede opties zijn lezen van /dev/urandom (werkt niet onder Windows) of iets als
http://php.net/manual/en/...l-random-pseudo-bytes.php. En dan heb je md5() ook niet meer nodig, dan bouw je gewoon je string direct van die random bits.
[
Voor 20% gewijzigd door
.oisyn op 20-09-2012 21:41
]