Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: generowanie losowych kodów
Forum PHP.pl > Forum > PHP
^piraciq^
witam wszystkich

wiem o tym ze ten problem byl juz tu poruszany ale nie moge znalesc tego chodzi mi mianowicie o generowanie kodów w locie

prosze o pomoc
GeoS
Jest wiele sposobow. Wymienie kilka funkcji, ktore mozna polaczyc do otrzymania losowego stringa:
crc32();
date();
mt_rand();
mktime();
md5();
...
^piraciq^
dzieki to wiem ale kiedys przewijal sie ty taki fajny skrypcik mnoze go ktos posiada??
spenalzo
Cytat
dzieki to wiem ale kiedys przewijal sie ty taki fajny skrypcik mnoze go ktos posiada??

Hmm.. nie wiem czy dobrze zapamietalem, bo to skomplikowany skrypt :-D
[php:1:6ef9b63976]<?php
echo md5(uniqid(rand()));
?>[/php:1:6ef9b63976]
^piraciq^
wlasnie wlasnie cos takiego
i to bylo nawet tutaj o ile mnie pamiec nie myli
b3
np..

[php:1:91a150d1b5]<?php
print md5(date("U"));

?>[/php:1:91a150d1b5]
adwol
Cytat
np..  

[php:1:3ddd8fca74]<?php
print md5(date("U"));

?>[/php:1:3ddd8fca74]

Zbyt trywialne do wykrycia. Dobrze losowy identyfikator musi bazować na szybkozmiennym źródle o dużej entropii. Znając w przybliżeniu czas stworzenia takiego id można szybko odnaleźć właściwy. Lepszym jest pomysł bazowania na liczbie mikrosekund (tak jak to robi np. uniqid) gdyż zmienia się ona znacznie szybciej.
Ja, osobiście, korzystam w takich wypadkach z mikrosekund, kilku rand()'ów, zawartości REMOTE_ADDR i REMOTE_PORT, loginie i haśle użytkownika (jeśli występują), pidzie procesu i zawartości zmiennych środowiskowych.
spenalzo
Cytat
Ja, osobiście, korzystam w takich wypadkach z mikrosekund, kilku rand()'ów, zawartości REMOTE_ADDR i REMOTE_PORT, loginie i haśle użytkownika (jeśli występują), pidzie procesu i zawartości zmiennych środowiskowych.

Bez przesady.
Zgodnie z tym co napisano w "PHP4. Aplikacje" aby identyfikator byl praktycznie nie do złamania wystarczy takie cos:
[php:1:4ffec4ca6f]<?
srand((double) microtime()*1000000);
$id=md5(uniqid(rand()));
?>[/php:1:4ffec4ca6f]
Z tego masz 340 282 366 920 938 463 463 374 607 431 768 211 456 mozliwych wartosci. A wiec chyba starczy, co? :-)
adwol
Cytat
Bez przesady.
Zgodnie z tym co napisano w "PHP4. Aplikacje" aby identyfikator byl praktycznie nie do złamania wystarczy takie cos:
[php:1:41c8d6a39b]<?
srand((double) microtime()*1000000);
$id=md5(uniqid(rand()));
?>[/php:1:41c8d6a39b]
Z tego masz 340 282 366 920 938 463 463 374 607 431 768 211 456 mozliwych wartosci. A wiec chyba starczy, co? :-)

No może faktycznie, czasami jestem paranoikiem. :wink:
Ale:
[php:1:41c8d6a39b]<?php
$id=md5(date('U'));
?>[/php:1:41c8d6a39b]
to jednak trochę za słabo.
spenalzo
Cytat
Ale:
[php:1:eb1ec5e307]<?php
$id=md5(date('U'));
?>[/php:1:eb1ec5e307]
to jednak trochę za słabo.

Zgadzam sie, chodzilo mi o Twoje sposoby :-)
Ale dobrze, że nie dał
[php:1:eb1ec5e307]<?php
$id=md5(date('Y'));
?>[/php:1:eb1ec5e307]
:-)
chfast
Cytat
[php:1:55ee4cc557]<?
srand((double) microtime()*1000000);
$id=md5(uniqid(rand()));
?>[/php:1:55ee4cc557]

Z tego co jest napisane w manualu wynika, że od php 4.2.0 nie trzeba inicjować generatora liczb losowych (srand()). Nie wiem jednak jak sie ma podawane ziarno w srand() do powtarzalności liczb wylosowanych przez rand(). Ja bym jednak opóścił srand() - bedzie jeszcze prościej.
rachwal
To ja sie jeszcze dorzuce z czyms takim:

[php:1:b1be3a0277]<?php
function makeRandomPassword() {
$salt = "abchefghjkmnpqrstuvwxyz0123456789";
srand((double)microtime()*1000000);
$i = 0;
while ($i <= 7) {
$num = rand() % 33;
$tmp = substr($salt, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
$random_password = makeRandomPassword();
echo "Random Password is $random_password n";
?>[/php:1:b1be3a0277]
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.