2011-05-15 24 views

Odpowiedz

10

Nie można generować prawdziwie losowych liczb w oprogramowaniu, ponieważ oprogramowanie jest deterministyczne: biorąc pod uwagę pewne dane wejściowe, zasadniczo zawsze generuje przewidywalne dane wyjściowe.

Tak więc, aby uzyskać liczby losowe, wynaleziono kilka algorytmów, które generują sekwencje liczb, które wyglądają losowo (ale tak naprawdę nie są - dlatego są nazywane liczbami pseudolosowymi).

Taki algorytm zaczyna się od pewnej wartości początkowej, materiału siewnego, a następnie wykonuje kilka obliczeń, aby wygenerować następną liczbę pseudolosową.

Jeśli algorytm jest dobry, to nie powinno być różnicy w wartościach początkowych: jedna wartość początkowa nie powinna być lepsza niż jakakolwiek inna przy generowaniu liczb losowych.

Często bieżąca godzina jest brana jako wartość początkowa, więc za każdym razem, gdy generujesz sekwencję liczb, otrzymujesz inną sekwencję. Zauważ, że jeśli użyjesz tej samej wartości początkowej, otrzymasz tę samą sekwencję liczb pseudolosowych za każdym razem, gdy ją uruchomisz.

Jeśli używasz liczb pseudolosowych do celów kryptograficznych, powinieneś być bardzo ostrożny, ponieważ jeśli atakujący zna wartość początkową, może ponownie generować sekwencję losowych liczb, które mogą zagrozić bezpieczeństwu twojego systemu. Dla naprawdę bezpiecznych systemów ludzie używają specjalnych sprzętowych generatorów liczb losowych, które mogą generować prawdziwie losowe liczby. Java ma klasę java.security.SecureRandom do interfejsu z takimi systemami.

Więcej informacji na temat różnych algorytmów można znaleźć na stronie Wikipedia: Random number generation.

+0

Chciałbym zagłosować, ale widocznie moja reputacja jest zbyt niska. – namen

+0

Przegłosowałem dla ciebie. ;-) Jednak była to dobra odpowiedź. Pamiętaj, że możesz także przyjąć odpowiedź. –

Powiązane problemy