Ищу алгоритм или готовый генератор пасвордов

Статус
В этой теме нельзя размещать новые ответы.

dr0id

Создатель
Регистрация
14 Апр 2008
Сообщения
42
Реакции
3
Для дипломной работы нужно такое....

Короче, есть алфавит "А", состоящий из N-числа символов. Нужно сгенерить последовательность из M-символов алфавита А случайным образом. С т.з. теории вероятностей - должно быть равновероятно появление любого из сгенерированных результатов (если не ошибаюсь - нормальное распределение). В работе уже рассмотрены некоторые алгоритмы - в т.ч. с использованием обычного "рандома", с хешем таймстэмпа и производных от них.
Для тех, кому интересно. В сравнительной характеристике алгоритмов будут представлены диаграммы по скорости, по количеству коллизий (попаданий в одну и ту же воронку двух снарядов, чего быть должно как можно меньше), и т.д... - по результатам непрерывной работы в течении нескольких часов.
В общем, для сравнительного теста нужно что-то толковое - с действительно случайноподобными результатами. Реализация на ПХП подойдет. Можно просто описание алгоритма.
Заранее спасибы.
 
В общем, для сравнительного теста нужно что-то толковое - с действительно случайноподобными результатами. Реализация на ПХП подойдет. Можно просто описание алгоритма.
Заранее спасибы.


Вот такая к примеру функция

Код:
  function generate_password($number)

  {

    $arr = array('a','b','c','d','e','f',

                 'g','h','i','j','k','l',

                 'm','n','o','p','r','s',

                 't','u','v','x','y','z',

                 '1','2','3','4','5','6',

                 '7','8','9','0');

    // Генерируем пароль

    $pass = "";

    for($i = 0; $i < $number; $i++)

    {

      // Вычисляем случайный индекс массива

      $index = rand(0, count($arr) - 1); ///// здесь можно и таймстамп добавить

      $pass .= $arr[$index];

    }

    return $pass;

  }
 
Спасибо за быстрый ответ, но такое - с небольшими отличиями - уже есть (а по сути - то же самое). Если кто не знает, обычный рандом генерит, в принципе, одни и те же последовательности. Хороший ГСЧ (генер. случ. чис.) стОит довольно больших денег и примененяется, напр-р, в онлайн-казино - там, где случайность критична. Сюда же относится криптография.... и т.д.
В идеале - берется какой-то аналоговый источник белого шума и цифруется. Но как обойтись БЕЗ этого - при помощи алгоритма? Нужно что-то более изощренное.
 
1. Я так понимаю, что алгоритмы типа "Генератор Фибоначчи с запаздываниями (Lagged Fibonacci generator)" и "Простой линейный конгруэнтный генератор псевдослучайных чисел" мы отметаем и хотим крутизны немеряной?

Тогда для начала предлагаю использовать Для просмотра ссылки Войди или Зарегистрируйся
+ Почитать юзер коменты к мануалу по mt_srand. В частности:
PHP:
function get_random_word($force_random=False)
{ 
if ($force_random) { $u=''; } else { $u='u'; }
$ran_string=shell_exec("head -c 4 /dev/{$u}random");
$random=ord(substr($ran_string,0,1))<<24 | ord(substr($ran_string,1,1))<<16 | ord(substr($ran_string,2,1))<<8 | ord(substr($ran_string,3,1));
return $random;
} 

mt_srand(get_random_word());
$randval = mt_rand(1,3);
echo $randval;
Если Вам и этого мало - читайте ниже.

2. Даю наводку: Библиотека mt_rand имеет плагины для добавления внешних источников энтропии... Посмотрите доку - и вполне можете прикрутить к ней потребный источник, там все просто.

3. Поинтересуйтесь реализациями в виде внешних функций для php: Tausworthe generator, Mersenne Twister ну или модификации Rc5/32/4/4 с уменьшенным кол-вом раундов и инициализацией RDTSC какой-нибудь... Имеется в виду, что из блочного _шифра_ псевдослучайной последовательности можно получить "более случайные" числа с равномерным распределением. Я говорю о том, что шифрованием мы можем выправить даже достаточно плохие распределения.

Один из неплохих способов получения случайных величин при помощи датчика построенного на шумящем диоде (который, допустим, перекошен в сторону единицы - выдает их чуть чаще) как раз и состоит в накоплении с шифрованием. А уж из зашифрованного и выбираются потихонечку биты... :cool:

4. Попробуйте пообщаться с народом наподобие Для просмотра ссылки Войди или Зарегистрируйся или с аналогичными людьми на форумах посвященных стойкой криптографии и т.п.

5. Добавьте железку в комп, средненькая стоит всего-то порядка 5килобаксов (но она опять, увы, будет выдавать псевдослучайные числа). При этом такие "дешевенькие" будут лишь капельку лучше mt_rand библиотеки.

6. Почитайте наконец Шнайера и его прикладную криптографию или taus -- гораздо проще и умней дядька (у него статей 30 по генераторам случайных чисел, не считая лекций) все вывел и нашел. Дешево, надежно и практично ;)

P.S. По поводу реализации доморощенных генераторов то такие, типа: function my_rand() { return sin(rand()+rand()*.1.3+4); } или бреда в этом духе - отметайте сразу, так как они генерируют последовательности заведомо хуже чем mt_rand().

P.P.S. Простите, а на фига реализовывать хороший генератор случайных чисел (лучше чем mt_rand()) на PHP? Время девать некуда, или побаловаться хочется? Я понимаю, что становится немного не по себе, когда видишь как по совершенно несогласующимся с теорвером факторам уходят $$$ с игровых сайтов, но... Вы вполне серьезно считаете, что такую вещь нужно и можно реализовывать на PHP?

Ню-ню... :D - кстати, удачи в написании и сдаче диплома! :ay:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху