Generować losowe hasła, z nie powtarzającymi się znakami
piechnat
Rozwiązanie dla początkujących
Można przy pomocy takiej funkcji:
function generujHaslo($dlugosc_hasla = 8, $zestaw_znakow = 'abcdefghijklmnopqrstuvwxyz0123456789')
{
srand(microtime(true));
$zakres=strlen($zestaw_znakow);
for ($i=0;$i<$dlugosc_hasla;$i++)
{
--$zakres;
$haslo.=$zestaw_znakow[$wylosowano=(rand(0,$zakres))];
$tmp=$zestaw_znakow[$wylosowano];
@$zestaw_znakow[$wylosowano]=$zestaw_znakow[$zakres];
@$zestaw_znakow[$zakres]=$tmp;
}
return $haslo;
}
Przykład:
echo 'Losowe hasło: '.generujHaslo();
Poprawne rozwiązanie
Do generowania haseł, upewnij się że korzystasz z funkcji która jest kryptograficznie bezpieczna:
Funkcje microtime()
oraz rand()
nie są kryptograficznie bezpieczne; a więc da się łatwo odgadnąć jakie hasło zostanie przez nie wygenerowane.
Mam nadzieję, że niczego nie zepsułem :P
trochę zoptymalizowałem ten kod, mimo że raczej php nie znam.
Ludzie! Chyba od tego mamy parametry w funkcji żeby je definiować, a nie siedzi sobie w środku długość i znaki a parametrów zero.
Demonical Monk: Mamy też domniemanie.. I co! teraz aby na szybko wygenerowac haslo musze podawac caly alfabet????? Chyba cos nie pasuje....
Tak powinna wygladac funkcja:
Takie coś jak długość hasła czy z jakich znaków ma być, to dodatki.. W domniemaniu się pisze.
w którym php jest napisany ten skrypt, bo mi nie działa??
Ło matko, ależ strasznie nieoptymalny kod O_o
Totalna masakra
No tak, data powstania: 2003-02-06 19:38
podobne używając for zamiast while unikniemy ciągłego wywoływania strlen($haslo)
$dlugosc_hasla jako paramtr funkcji dodał by trochę uniwersalności
funkcje strlen($zestaw_znakow) - 1 - powinnismy wystawic przed petle, co pozwoli na szybsze dzialanie programu