LINUX.ORG.RU

случайные данные


0

0

Каким образом в программе можно получить случаные данные ? типа "gjgHgf84" разной длины. Это нормально читать /dev/urandom или есть еще какие -то решения ?

★★★★★
Ответ на: комментарий от anonymous

> а чем rand(3) не угодил? http://www.library.cornell.edu/nr/bookcpdf/c7-0.pdf

http://www.library.cornell.edu/nr/bookcpdf/c7-1.pdf: Now our first, and perhaps most important, lesson in this chapter is: be very, very suspicious of a system-supplied rand() ..... If all scientific papers whose results are in doubt because of bad rand()s were to disappear from library shelves, there would be a gap on each shelf about as big as your fist.

phrm ★★
()

лучше читать /dev/random --- там случайные числа, но оттуда нельзя читать слишком быстро --- случайные числа "кончатся"

/dev/urandom --- псевдослучайные числа

можно использовать свой генератор псевдослучайных чисел (например, тот, который в rsa или blum-blum-shub, или mersienne twister)

если нужны числа для криптографии, то нужно выбирать криптографически стойкий генератор чисел (rsa, например) (но они обычно медленные).

если же для вычислений, то тут уже зависит от того, насколько хорошие случайные числа тебе нужны, и насколько быстро. (вроде mersienne twister хороший --- детально не разбирался, но говорят, что намного лучше (случайнее), чем линейный конгруэнтный генератор (тот, который rand)

гуглить на тему (pseudo) random number generator

еще в википедии на эту тему есть статья со ссылками, еще www.random.org.

hatefu1_dead
()
Ответ на: комментарий от roy

Если сильная случайность не нужна:

char *generate_key(int len) { int i; char *key; static char allowed[] = "qwertyuiopasdfghjklzxcvbnm1234567890-_";

key = calloc(len + 1, sizeof(char)); for (i = 0; i < len; i++) { key[i] = allowed[rand() % (sizeof(allowed) - 1)]; } return key; }

Motl
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.