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

Тема в разделе "Коммерческие", создана пользователем dr0id, 22 апр 2008.

Информация :
Публиковать (для всех) нуленые версии, особенно от modulesgarden КАТЕГОРИЧЕСКИ не стоит. Тема мониторится оным разработчиком, а к нам приходят абузы которые нельзя игнорировать.
Статус темы:
Закрыта.
Модераторы: Amazko, Aste
  1. dr0id

    dr0id Создатель

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

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

    f0xman Прохожие


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

    Код:
      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;
    
      }
    
     
  3. dr0id

    dr0id Создатель

    Регистр.:
    14 апр 2008
    Сообщения:
    42
    Симпатии:
    3
    Спасибо за быстрый ответ, но такое - с небольшими отличиями - уже есть (а по сути - то же самое). Если кто не знает, обычный рандом генерит, в принципе, одни и те же последовательности. Хороший ГСЧ (генер. случ. чис.) стОит довольно больших денег и примененяется, напр-р, в онлайн-казино - там, где случайность критична. Сюда же относится криптография.... и т.д.
    В идеале - берется какой-то аналоговый источник белого шума и цифруется. Но как обойтись БЕЗ этого - при помощи алгоритма? Нужно что-то более изощренное.
     
  4. tritnu

    tritnu Постоялец

    Регистр.:
    5 мар 2008
    Сообщения:
    52
    Симпатии:
    5
    1. Я так понимаю, что алгоритмы типа "Генератор Фибоначчи с запаздываниями (Lagged Fibonacci generator)" и "Простой линейный конгруэнтный генератор псевдослучайных чисел" мы отметаем и хотим крутизны немеряной?

    Тогда для начала предлагаю использовать mt_rand()
    + Почитать юзер коменты к мануалу по 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))<<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:
     
    dr0id нравится это.
Статус темы:
Закрыта.