Как мне правильно использовать GUID? - PullRequest
3 голосов
/ 11 августа 2010

Я прочитал ответ о guid , и это было довольно интересно. Похоже, что GUID основан на времени, а v1 использует MAC-адрес, а v4 использует RNG.

Из вики

Криптоанализ WinAPI GUID генератор показывает, что, так как последовательность идентификаторов GUID V4 является псевдослучайной; учитывая полное знание внутреннего состояние, можно прогнозировать предыдущие и последующие значения.

Мне нужно беспокоиться об этом? скажем при создании файлов cookie для пользователей? или ключи сброса пароля?

Мой вопрос заключается в том, как правильно использовать GUID и как предотвратить создание одного и того же GUID (скажем, через два потока на одной машине, созданных за одну и ту же миллисекунду) и как использовать его таким образом, чтобы он не отображал предыдущие ключи. Я переключаюсь с использования асинхронного RNG для синхронизации RNG (блокировки между потоками) на GUID, и теперь я думаю, что с этим может быть проблема.

Ответы [ 2 ]

1 голос
/ 11 августа 2010

Вам не нужно беспокоиться об этом.

Вы не будете создавать дубликаты Guids с .Net.

Если бы это было возможно, вы бы тут жаловались повсюду.Во всем мире люди выпускают новые Руководства в .Net с непостижимой скоростью, со скоростью, к которой вы или я никогда не приблизитесь, и ни один из них не генерировал дубликатов.Вызов Guid.NewGuid() гарантированно безопасен для потоков.Многоядерный не будет иметь значения.Генерируйте их как можно быстрее на самом быстром сервере, который вы можете найти, и у вас все еще не будет проблем.

Серьезно, не о чем беспокоиться.

1 голос
/ 11 августа 2010

Ответ - использовать графический интерфейс на основе случайных чисел.

Более простые схемы фактически сломаны. Увеличивая скорость процессора, вы можете генерировать несколько идентификаторов GUID на основе одного и того же тик миллисекунды. Виртуализация означает, что вы можете использовать один и тот же MAC-адрес для нескольких экземпляров ОС. Рост числа многопроцессорных машин означает, что два процесса могут генерировать идентификаторы GUID на одном компьютере в одном такте.

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

...