Gå til innhold

Really Random string


Anbefalte innlegg

Det finnes mange måter å lage en "random string" feks til passord generering, men de fleste av disse er ikke egentlig fullstendig random, derimot finnes det måter som gjør at det blir mer random:

 

en måte er da:


function randStr( $length ) {

 if( $length > 36 ) {

    return "ERROR";

 }else{

    $str = md5(mktime());

    $cutoff = 31 - $length;

    $start = rand(0, $cutoff);

    return substr($str, $start, $length);

 }

}

 

Not only does it first generate a number that will never repeat, but it then MD5s it for flavour, then it chops it down to whatever length you want (up to 36 characters). However, if you do not use the full 36, it will chop it from a random place in the string, ie:

e5hdksuth834h5hfcb6j4la43gj7e0p234b6

 

is generated... if you specify 5 chars, it wont just use:

e5hdk or 234b6 (first / last 5 chars of the string), but it will use a string of 5 chars from any randomly selected location (within the necessary scope) within the string! Pretty nifty, eh'?

 

jeg fant dette scriptet på no2.php.net/rand under: "user contributed notes"

 

andre enn meg som har noen synspunkter på dette?

Lenke til kommentar
Videoannonse
Annonse

Spiller det noen trille om det random.. eller bare "nesten" random da?

Har man virkelig bruk for "perfekt" randomisering? ... i PHP vel og merke.

 

Hvilken rell nytte er det av slik kode?

 

Hmm, følgte linken og leste litt ....

 

[ Editor's Note: The string which this function ultimately creates may and probably will repeat given sufficient itterations even though the seed value is based on the time which is a sequentially increasing number.  The fequency of duplication is dependent on $length but can, theoretically, happen over a very short cycle. ]  

 

If you want a REALLY random string, here's how you do it:  

 

function randStr( $length )  

{  

if ( $length > 36 )  

{  

return "ERROR";  

}  

else  

{  

$str = md5(mktime());  

$cutoff = 31 - $length;  

$start = rand(0, $cutoff);  

return substr($str, $start, $length);  

}  

}  

 

Not only does it first generate a number that will never repeat, but it then MD5s it for flavour, then it chops it down to whatever length you want (up to 36 characters). However, if you do not use the full 36, it will chop it from a random place in the string, ie:  

e5hdksuth834h5hfcb6j4la43gj7e0p234b6  

 

is generated... if you specify 5 chars, it wont just use:  

e5hdk or 234b6 (first / last 5 chars of the string), but it will use a string of 5 chars from any randomly selected location (within the necessary scope) within the string! Pretty nifty, eh'?  

 

-my 2¢

 

Hvis Editors Note refererer til rand()-funksjonen så risikerer man i teorien å få en sekvens som gjentar seg med korte intervaller?

 

Snodig.. men det besvarer vel kanskje spørsmålet mitt :shrug:

Lenke til kommentar

Hehe. Dette temaet er jo omdiskutert i det lange og det breie og de fleste algoritme-guruer verden over har vel mer eller mindre blitt enige om at det ikke går an å få en pc til å gjøre noe helt tilfeldig med dagens maskiner. Man kan jo alltids "jokke" til en tekst mer og mer og "choppe", "md5'e", "hashe", "time" osv i det lange og det breie, men det vil aldri bli helt tilfeldig grunnet at en maskin ikke kan tenke på egenhånd.

Lenke til kommentar
Hehe. Dette temaet er jo omdiskutert i det lange og det breie og de fleste algoritme-guruer verden over har vel mer eller mindre blitt enige om at det ikke går an å få en pc til å gjøre noe helt tilfeldig med dagens maskiner. Man kan jo alltids "jokke" til en tekst mer og mer og "choppe", "md5'e", "hashe", "time" osv i det lange og det breie, men det vil aldri bli helt tilfeldig grunnet at en maskin ikke kan tenke på egenhånd.

 

Nå var det kanskje litt dumt av meg å trekke inn begrepet "perfekt" randomisering. Slik jeg oppfattet det, var det snakk om å forbedre random() funksjonen ved å gjøre den mer random.

 

Det jeg i utgangspunktet lurte på, var om random()-funksjonen slik den er faktisk har behov for forbedring? I så fall under hvilken omstendigheter vil det komme til nytte?

 

Hvis det er tilfelle at man risikerer sekvenser som gjentar seg med korte intervaller med random()-funksjonen som den er, så kan det vel tenkes et scenario eller to der denne "forbedringen" kan være verdifull.

 

 

 

BIW

Lenke til kommentar

i bunn og grunn så har jeg aldri tenkt at feks jeg selv vil få noe akkutt behov for sånn koding, men si at man har et brukersystem med mange millioner brukere, lite trolig, men uansett med de mest normale formene for randomisering og passord generering vil stringene alltid gjenta seg fra tid til annen, men jo mer man choper hasher md5'er jo skjeldnere vil dette forekomme...

 

(har dårlig tid nå, men kommer tilbake til det i morgen eller.no)

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...