Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Niebezpieczna powtarzalność kodów wygenerowanych przez rand()
Forum PHP.pl > Forum > Przedszkole
neo1986kk
  1. <?php
  2.  
  3. function randPass($upper = 0, $lower = 4, $numeric = 4, $other = 0) {
  4. //we need these vars to create a password string
  5. $passOrder = Array();
  6. $passWord = '';
  7.  
  8. //generate the contents of the password
  9. for ($i = 0; $i < $upper; $i++) {
  10. $passOrder[] = chr(rand(65, 90));
  11. }
  12. for ($i = 0; $i < $lower; $i++) {
  13. $passOrder[] = chr(rand(97, 122));
  14. }
  15. for ($i = 0; $i < $numeric; $i++) {
  16. $passOrder[] = chr(rand(48, 57));
  17. }
  18. for ($i = 0; $i < $other; $i++) {
  19. $passOrder[] = chr(rand(33, 47));
  20. }
  21.  
  22. //randomize the order of characters
  23. //shuffle($passOrder);
  24.  
  25. //concatenate into a string
  26. foreach ($passOrder as $char) {
  27. $passWord .= $char;
  28. }
  29.  
  30. //we're done
  31. return $passWord;
  32. }
  33.  
  34. for($j=0; $j<100000; $j++){
  35.  
  36. echo $j.' '. randPass().'</br>';
  37.  
  38. }


To jest przykład z manuala, a chodzi o to, że co 4096 powtarza się ta sama sekwencja czyli

0 radg0698
1 vcwy0048
...
...

4096 radg0698
4097 vcwy0048
...
...

8192 radg0698
8193 vcwy0048

Czy wiecie może dlaczego tak jest?
Wydaje mi się, że zerowanie tablic jest tutaj w porządku...
shuffle($passOrder) którą zakomentowałem, również pozostaje w tej sekwencji, tzn zmienia kolejność liter i cyfr, ale i tak pozostaje w sekwencji tylko, że o 32768.
Ja potrzebuję około 15 mln tak wygenerowanych losowych kodów także nie ratuje mnie to.
lobopol
Bo rand nie jest zbyt losowy. Dla większego rozrzutu użyj mt_rand
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.