Баг: генератор ключей выдает один и тот же ключ, если интервал между запусками достаточно мал.
Лезу в код, вижу примерно такое.
Далее этот класс инстанциируется для T = uint32_t.
Первое, что бросается в глаза, что /dev/urandom мы открываем как текстовый файл. А потом пытаемся читать из него 4хбайтное целое.
Добавил ios::binary -- лучше не стало.
Вынес в отдельный файл, стал экспериментировать.
Не читается uint32 из '/dev/random'.
Поменял тип на char - читает.
На short - опять не читает.
И такое поведение одинаково на osx, linux и freebsd.
А потом я вспомнил, что /dev/[u]random - это character device.
Лезу в код, вижу примерно такое.
template <typename T> RandomGenerator::RandomGenerator() { T seed = 0; { std::ifstream in("/dev/urandom"); in >> seed; } if (!seed) seed = clock(NULL); ... // далее seed используется, чтобы инициализировать один из бустовских ГПСЧ. }
Далее этот класс инстанциируется для T = uint32_t.
Первое, что бросается в глаза, что /dev/urandom мы открываем как текстовый файл. А потом пытаемся читать из него 4хбайтное целое.
Добавил ios::binary -- лучше не стало.
Вынес в отдельный файл, стал экспериментировать.
Не читается uint32 из '/dev/random'.
Поменял тип на char - читает.
На short - опять не читает.
И такое поведение одинаково на osx, linux и freebsd.
А потом я вспомнил, что /dev/[u]random - это character device.
Комментариев нет:
Отправить комментарий