SecureRandom.uuid vs UUID gem

Есть ли разница между ruby ​​SecureRandom.uuid(Ruby 1.9.3) и жемчугом UUID? Является ли жемчуг UUID "старым" способом делать вещи?

Из документов, которые я собираю, этот драгоценный камень более "безопасен", чтобы быть настоящим уникальным UUID, в то время как SecureRandom.uuid - скорее случайная строка, у которой больше шансов быть уникальной. Кроме того, UUID, похоже, позволяет поддерживать на основе файлов поддержку.

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

Ответ 1

Существует несколько способов создания UUID.

Википедия делает хорошую работу по их перечислению.

http://en.wikipedia.org/wiki/Universally_unique_identifier

v4 UUIDs:

Ключевая идея о случайности - это то, что на самом деле очень сложно сгенерировать, когда речь идет о шифровании. Большинство генераторов случайных чисел представляют собой математическую формулу, которая просто должна ПОСМОТРЕТЬ случайным образом, и это отлично подходит для большинства приложений. Многие программы будут использовать $pid | время, чтобы генерировать случайное семя.

Что, не очень многообещающе... Я знаю, в какое время был сформирован запрос, и есть только 65 534 pids. Я могу выяснить случайное семя от этого.

Итак, если вы заселяете свой генератор чисел UUIDv4 в одно и то же время (то же самое) с помощью $pid | time() на 100 машинах с номерами PID, то у вас есть (я думаю) 100/65536 вероятность дублирования. Это можно сделать довольно легко, как это

for MACH in `cat machine_list`; do ; ssh $MACH -c "restart something" & ; done

SecureRandom:

Код из SecureRandom, пытается openssl,/dev/urandom, затем win32...

При чтении из /dev/urandom это очень случайный случай, но если в системе недостаточно хаоса, urandom сделает материал для доставки случайных данных. Когда вы читаете /dev/random, его "ОЧЕНЬ случайный", и если не хватает хаоса, /dev/random будет блокироваться.

UUID:

В графе UUID используется rand()

   r = [rand(0x100000000)].pack "N"

для адреса mac.

UUID также не предоставляет UUID v4:)

Практически, если у меня когда-либо было столкновение md5 или uuid, я покупаю лотерейный билет!