Здравствуйте, ., Вы писали:
>> если имеем белый шум на входе, то мы его имеем и на выходе. Так в чем
>> недостаток моего метода? Хотелось бы увидеть нормальные аргументы, а не
.>Он смысла не имеет. Проще взять просто первые 12 разрядов гуида и никаких ксоров не надо.
Этого нельзя делать, потому что GUID состоит из четырёх полей, каждое из которых по отдельности
не гарантирует уникальности:
60 бит таймштампа;
48 бит идентификатора сетевой карты;
14 бит уникализатора;
и 6 фиксированных бит.
12 десятичных разрядов — это, как тут уже считали, около 40 двоичных. Если их брать из времени, получается неплохая вероятность получить одинаковые значения для двух последовательных вызовов. Если из идентификатора сетевой карты — они вообще всегда будут одинаковые. Уникализатор же один раз инициализируется случайным числом и далее инкрементируется последовательно только при переводе часов назад.
Centaur wrote:
> Этого нельзя делать, потому что GUID состоит из четырёх полей, каждое из
> которых по отдельности не гарантирует уникальности
> <http://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx>:
Это верно для UUID algorithm 1, который давно уж не используется.
Просто рассчитывать на то, что xor как-то поможет — не стоит. Если хватит "абы как случайное число", то достаточно взять первые n разрядов. Если же нужно "чтобы никто не смог угадать", то надо взять криптографически стойкий генератор случайных чисел. xor даёт лишь False Sense of Confidence.
Posted via RSDN NNTP Server 2.1 beta