Нужно ли открывать / dev / urandom при каждом чтении? - PullRequest
0 голосов
/ 07 января 2019

У меня сервер работает в вечном цикле. Время от времени сервер должен выполнять хеширование пароля (точнее, каждый раз, когда пользователь регистрируется в моей службе). Алгоритм хеширования требует соли, 16 случайных байтов, которые я прочитал из /dev/urandom, как рекомендуют многие.

Итак, я подумал: почему бы не вызвать fopen("/dev/urandom", "rb") только один раз при запуске сервера, а затем вызвать fread, как мне нужно?

Примеры, которые я нашел в Интернете, обычно показывают fread, перед которым стоит fopen. Но разве это не дорого?

1 Ответ

0 голосов
/ 07 января 2019

/dev/urandom - это интерфейс к генератору случайных чисел, управляемому энтропией ядра. Он имеет справочную страницу, которую вы можете найти онлайн и, вероятно, также локально. Открытие через fopen() не имеет документированного влияния на данные, которые впоследствии могут быть прочитаны. Нет задокументированного ограничения на одно чтение за одно открытие, и такой предел не будет правдоподобным.

Итак, я подумал: почему бы не позвонить fopen("/dev/urandom", "rb") только один раз в запуск сервера, а затем позвоните fread, как мне нужно?

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

Примеры, которые я нашел в Интернете, обычно показывают фред, непосредственно предшествующий fopen. Но разве это не дорого?

Открытие файла сравнительно дорого, особенно с учетом того, что он уже открыт и, следовательно, ничего не делает, но то, насколько он дорог, имеет значение, зависит от того, как часто это делается, чем еще может заниматься программа в или около нее. В то же время и другие факторы. Однако я склонен полагать, что ничего из этого не имеет никакого отношения к вашим веб-примерам, поскольку я считаю, что они представлены, поскольку они, по крайней мере, частично для дидактических целей. Если вы пишете пример, то гораздо проще и яснее показать fopen(), чем описать словами, что используемый вами FILE подключен к /dev/urandom.

...