Насколько Случайный Система. Гуид. NewGuid ()?

Если у вас другая проблема, вам может понадобиться другое решение, но для вашей текущей проблемы я просто зайду:

IntStream
    .iterate(1, n -> n + 1)
    .limit(10)
    .forEach(System.out::println);
48
задан GateKiller 21 January 2009 в 22:33
поделиться

7 ответов

Я не могу говорить с предсказуемостью порядковых номеров, но это будет уникально. Я думаю, что Вы были бы более обеспеченным использованием генератора случайных чисел от Системы. Безопасность. Криптография, все же. Свяжите случайное число монотонно увеличивающимся значением (время) для генерации уникального ключа, и можно быть уверены, что это уникально и не предсказуемо.

5
ответ дан tvanfosson 7 November 2019 в 22:41
поделиться

Никакое значение фиксированной длины никогда не может гарантировать, что было на 100% уникально (просто называют его достаточно раз, плюс-минус окончание вселенной;-p) - но это может быть очень, очень, очень вряд ли для дублирования.

11
ответ дан Marc Gravell 7 November 2019 в 22:41
поделиться

Принятие той Системы. Гуид. NewGuid использует CoCreateGuid, это не случайно вообще. Исторически, алгоритм, используемый для создания гуидов, должен был включить MAC-адрес от сетевого адаптера, в дополнение к некоторым другим вещам как время. Я не уверен, изменился ли алгоритм. В то время как это, конечно, не случайно, это, как гарантируют, будет уникально.

3
ответ дан Tron 7 November 2019 в 22:41
поделиться

Я не знаю о.NET, но , алгоритм UUID определяется справедливо точно.

редактирование: при рассмотрении соответствующих битов (см. статью в Википедии), который должен объяснить, какая версия UUID используется.

редактирование 2: красный флаг для Вашего использования "безопасного" слова, который говорит мне, Вы - более обеспеченное использование четко определенного криптографического метода. Например, при генерации идентификаторов сессии на сервере, почему просто не, что-то простое как применяет хеш MD5 к конкатенации соответствующего подмножества следующего: {клиентский IP-адрес машины, последовательно увеличенный счетчик, зафиксировал секретную константу по Вашему выбору, произведенный от генератора случайных чисел по Вашему выбору, и т.д.}?

3
ответ дан Jason S 7 November 2019 в 22:41
поделиться

Документация для Системы. Гуид. NewGuid () не делает гарантий случайности, поэтому в то время как текущая реализация основана на генераторе случайных чисел (это - версия 4 алгоритма, который был разработан после того, как проблемы конфиденциальности явились результатом версии 1, которая использовала MAC-адрес; другая система как OS X Apple все еще использует версию 1 алгоритма).

Поэтому, в то время как у Вас есть очень высокая вероятность Системы. Гуид. NewGuid () генерация уникального значения, Вы не можете сделать предположения о его предсказуемости, потому что это не определяется документацией.

4
ответ дан James Williams 7 November 2019 в 22:41
поделиться

GUID, по определению, уникальны во всех отношениях. Были, когда-то давно, некоторые стандартные программы GUID0-поколения, которые генерировали последовательные GUID, но те были проблемами в... Win98, я думаю и был hotfixed Microsoft.

Вам необходимо доверять сгенерированному GUID, чтобы быть уникальными и никогда не повторяли или повторно создавали.

(РЕДАКТИРОВАНИЕ: Однако все мы понимаем, что строка алфавитно-цифровых символов имеет постоянное число перестановок, если строка починена в длине. Но в случае GUID количество перестановок является economical*.)

(* Черт возьми, где то, что XKCD, где предложение "астрономических" чисел не являются достаточно большими?)

1
ответ дан JMD 7 November 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: