Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Niebezpieczna powtarzalność kodów wygenerowanych przez rand()
neo1986kk
post 3.04.2013, 13:41:29
Post #1





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
lobopol
post 3.04.2013, 14:07:26
Post #2





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

Ostrzeżenie: (0%)
-----


Bo rand nie jest zbyt losowy. Dla większego rozrzutu użyj mt_rand


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:37