Generování hesel v PHP

Odesláno v August 4, 2006 | Kategorie PHP | Leave a Comment

Jak hodně spoléháte na náhodu?

Dnes jsem zjistil, že já docela dost. Potřeboval jsem v PHP vygenerovat hesla pro 65000 záznamů . Mám (měl jsem) jednoduchý generátor náhodných hesel:

function generpassword($length=45,$chars = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890’){
$numChars = strlen($chars);
$r = ”;
for ($i = 0; $i < $length; $i++) { $r .= substr($chars, rand(1, $numChars) – 1, 1);
}
return $r;
}
45 znaků, každý 124 možností. Duplicita hesel je statisticky téměř vyloučena, pokud vy se přece jenom taková událost stala, dáme to do smyčky while (1) a šmytec. Jednou se to přece vygenerovat musí.

Ale ne, nemusí.

Po vygenerování hesla číslo: 32768 data se začnou opakovat, dokonce ve stejném pořadí a už ani nelze vygenerovat nové heslo. Jasně, generátor je pseudonáhodný, to přece víme z časů programování v C. Přesto ale málokdo tuší, že je až tak snadno vypočitatelný. Sekvence se opakuje dokonce už každých 32768 znaků.

Používejte raději mt_rand. Nezradí vás :-)


<?php
function generpassword($length=45,$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'){
$numChars = strlen($chars);
$r = '';
for ($i = 0; $i < $length; $i++) {
$r .= substr($chars, mt_rand(1, $numChars) - 1, 1);
}
return $r;
}
?>

Komentáře

Váš komentář: