• Как правильно генерировать псевдослучайные числа?

    kumaxim
    @kumaxim
    Web-программист
    Судя по Вашему комментарию к ответу Ivan Sokolov Вы несколько не понимайте суть своего же вопроса.

    Любое, повторюсь, абсолютно любое, псевдослучайное число будет находиться в какой-то последовательности, причем сама последовательность будет строиться по какой-то формуле.

    Я очень глубоко сомневаюсь что вообще кто-либо когда-либо сможет получить абсолютно случайное число, т.к. любая случайность это непознанная закономерность!

    Отдельный вопрос - на сколько вообще предсказуемо появление числел в Вашей последовательности. Вот от этого нужно вести все поиски.

    Возьмем, например, функцию rand() из любого языка программирования. Она будет генерировать псевдослучайное число основываясь на метки времени в unixtime. На сколько она предсказуема? Хм, думаю не менее чем на 100%. Хорошо, получается что зная приблизительное время запуска функции rand(), скажем, с точностью до 1 минуты, мы можем получить точно такое же псевдослучайное число. Отлично, т.е. вот от этого нужно и копать.

    Давайте предположим, что мы вытянули список компаний из ЕГРЮЛ по Москве и взяли их ОРГН. Далее, наша функция генерирует unixtime и из него мы вычитаем этот самый ОГРН, причем последние две цифтры в unixtime и ОГРН должны совпадать(к примеру, условие выбора ОГРН может быть любое). Чего мы добились? Зная время работы функции rand() мы не можем сгенерировать второе точно такое же псевдослучайное число. Вы мне можете сейчас возразить, что давайте возьмем тот же ОГРН и повторим процедуру. На этом месте я хочу задать Вам вопрос: а от кого мы вообще строим защиту? Злоумышленник является создателем системы и знает о ней 100%? Я думаю любая защита в этом случае просто бессмысленна.

    Вы должны внести в свою формулу генерации некое неожиданное поведение, которые будет отличаться от того, что есть в стандартной реализации. Будет это какой-то ОГРН, дни рождения Ваших коллег, ID юзеров в ВК и т.п. Внешнему атакующему эта особенность не известна.

    Будет ли при этом Ваш ряд псевдослучайных числем более или менее случайным? Хм... Большой вопрос... На этом месте опять вспоминаем что такое случайность.
    Позволит ли это повысить защищенность системы? Думаю от части может, потому что злоумышленнику неизвестен алгоритм генерации, хотя это в определенной степени и плохо.

    Резюмируя все выше сказанное - чтобы сделать Ваш ряд псевдослучайных чисел более случайным, нужно в формулу его генерации добавить число из другого ряда чего-то псевдослучайного. Также сильно рекомендую получившиеся псевдослучайное число проверять на простоту, если Вы его собирайтесь использовать как значение в генерации секретного ключа для ГОСТ или RSA
    Ответ написан
    2 комментария
  • Как работать с датами?

    qlkvg
    @qlkvg
    python backend developer
    from datetime import datetime, date
    from dateutil.relativedelta import relativedelta
    birthday_date = datetime.strptime("01.02.1990", "%d.%m.%Y").date()
    if birthday_date > date(1990, 1, 1) and birthday_date < date(1995 1, 31):
        birthday_date += relativedelta(years=146)


    обрати внимание, что число-месяц-год идут в обратном порядке
    Ответ написан
    2 комментария
  • Какие есть туториалы по написанию реальных приложений на Python?

    @nikelen
    Учебное пособие с переводами на разные языки и видео c примерами кодов:
    programarcadegames.com ( русский язык)
    Видео уроки по созданию веб приложений с помощью Django:
    https://www.youtube.com/watch?v=QgdINlxm-wE (русский язык)
    Примеры кодов и ссылки на видео уроки по PyGame:
    programmingnew.my1.ru (русский язык)
    Ответ написан
    Комментировать