Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 UnkwnTech
UnkwnTech

Randare mai bună Generarea de PHP

Știu că doar folosind rand () este predictibilă, dacă știți ce faceți și aveți acces la server.

Am un proiect care este foarte dependent de alegerea unui număr aleator care este la fel de imprevizibil cu putință. Așadar, caut sugestii, fie alte funcții încorporate, fie funcții de utilizator, care pot genera un număr aleatoriu mai bun .

Am folosit acest lucru pentru a face un test mic:

$i = 0;

while($i < 10000){
    $rand = rand(0, 100);

    if(!isset($array[$rand])){
        $array[$rand] = 1;
    } else {
        $array[$rand]++;
    }

    sort($array);
    $i++;
}

Am constatat că rezultatele sunt distribuite uniform și există un model ciudat la numărul de ocazii generate de fiecare număr.

21 2008-08-08T03:18:56+00:00 6
Programare
random
php
security
Comentarii la întrebare (0)
Justin Yost
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#5679

Variație la @ KG, folosind milisecunde de la EPOCH ca semințe pentru rand?

0
0
Comentarii (0)
Christian Lescuyer
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#5820

Adăugarea, înmulțirea sau trunchierea unei surse aleatoare necorespunzătoare vă va oferi un rezultat slab și aleatoriu. Consultați Introducere în numere aleatorii și aleatoare pentru o explicație.

Ai dreptate în ceea ce privește funcția PHP rand (). Consultați a doua cifră din Analiza statistică pentru o ilustrare izbitoare. (Prima figură este izbitoare, dar a fost desenată de Scott Adams, care nu a fost reprezentată cu rand ()).

O soluție este să utilizați un generator de aleatoare adevărat, cum ar fi random.org . Altă, dacă sunteți pe Linux / BSD / etc. este să utilizați / dev / random . În cazul în care întâmplarea este critică pentru misiune, va trebui să utilizați un generator aleatoriu hardware .

0
0
Comentarii (0)
Kevin
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#5835

random.org has an API you can access via HTTP.

RANDOM.ORG este un serviciu de numere aleatoare care generează întâmplări   prin zgomot atmosferic.

0
0
Comentarii (0)
Christian Lescuyer
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#6344

M-aș îngriji de impresia de aleatorie: au existat multe experimente în care oamenii ar alege distribuția mai puțin aleatorie. Se pare că mintea nu este foarte bună la producerea sau estimarea aleatorie.

Există articole bune despre întâmplare la Fourmilab , inclusiv un alt generator adevărat aleator . Poate că ați putea obține date aleatorii de pe ambele site-uri, deci dacă cineva este în jos, încă mai aveți alta.

Fourmilab oferă, de asemenea, un program de testare pentru a verifica întâmplarea. Ai putea să-l folosești pentru a-ți verifica diferitele programe myRand ().

În ceea ce privește ultimul program, dacă generați 10000 de valori, de ce nu alegeți valoarea finală dintre cele 10 mii? Vă restricționați la un subset. De asemenea, nu va funcționa dacă $ min și $ max sunt mai mari de 10000.

Oricum, aleatorie de care ai nevoie depinde de cererea ta. rand () va fi OK pentru un joc on-line, dar nu este bine pentru criptografie (orice nu este testat temeinic cu programele statistice nu va fi potrivit pentru criptografie oricum). Tu ești judecătorul!

0
0
Comentarii (0)
Aaron Gong
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#18867906

O altă modalitate de obținere a numerelor aleatorii, asemănătoare conceptului cu obținerea UUID

PHP Versiunea 5.3 și versiunile anterioare

openssl_random_pseudo_bytes(...)

Sau puteți încerca următoarea bibliotecă utilizând RFC4122

0
0
Comentarii (0)
Salvador Dali
1 ianuarie 1970 в 3:00
1970-01-01T03:00:00+00:00
Mai mult
Sursă
Editează
#31444887

A new PHP7 there is a function that does exactly what you needed: it generates cryptographically secure pseudo-random integers.

int random_int ( int $min , int $max )

generează cifre criptografice aleatorii potrivite pentru utilizare   unde rezultatele imparțiale sunt critice (adică amestecarea unui pachet de poker).

Pentru o explicație mai detaliată despre PRNG și CSPRNG (și diferența lor), precum și de ce abordarea inițială este de fapt o idee proastă, vă rugăm să citiți un alt răspuns foarte similar .

0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RU
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire