Как генерировать 40-битные уникальные значения случайным образом? - PullRequest
0 голосов
/ 25 июля 2011

Я хотел бы генерировать 40-битные значения, которые являются уникальными и не [так легко] угадываемыми.

Как я могу это сделать?Любые предложения?

-edit-
Меня интересует алгоритм, C # или Java будет вишня в верхней части торта!

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

Ответы [ 3 ]

0 голосов
/ 25 июля 2011

На какой ты платформе? В unix-системах просто читайте 40 бит из / dev / random (блокирует, если доступна недостаточная энтропия) или / dev / urandom (не блокирует, но также выдает случайные числа низкого качества, если энтропия ограничена).

0 голосов
/ 26 июля 2011

получить первые 12 бит (максимум 4095) как день от первого выпуска вашей программы (будет уникальной частью), другие 38 бит используются от случайного системного вызова / функции. так что вы перепроверили в последний день только значения для уникальных. извините, ни в коем случае GRANT уникален из непредсказуемого (случайного) значения.

Вы можете использовать больше частей от даты, например, до секунд. Вы можете изменить предсказуемые (дата) биты, но это не повысит безопасность.

В любом случае вы должны балансировать между уникальным временем проверки / случайным качеством. Чтобы увеличить скорость проверки, можете использовать бинарное дерево или другую технику.

также вы можете использовать значение таймера до миллисекунд ... для занятой системы это будет уникально (если блокировка потока + 50 мс в спящем режиме) и не так предсказуемо в многопоточной среде.

0 голосов
/ 25 июля 2011

присвоить что? в общем случае random = unqiue, так что используйте random. или

дата | md5sum | cut -b 4-9

что-то в этом роде

...