13

ruby 的 SecureRandom.uuid (Ruby 1.9.3) 和 UUID gem 之间有区别吗?UUID gem 是“旧”的做事方式吗?

从文档中我了解到,gem 作为真正唯一的 UUID 更“安全”,而 SecureRandom.uuid 更像是一个随机字符串,它更有可能不是唯一的。此外,UUID 似乎允许基于文件的持久性来帮助解决这个问题。

所以我希望听到一些比我更有洞察力的人对此的看法。

4

1 回答 1

8

有几种生成 UUID 的方法。

维基百科很好地列出了它们。

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

v4 UUID:

关于随机的关键思想是,在与加密相关时实际上很难生成。大多数随机数生成器都是一个数学公式,只需要看起来随机,并且适用于大多数应用程序。许多程序将使用 $pid | 时间,生成随机种子。

哪个,不是很有希望...我知道生成请求的时间,并且只有 65,534 个 pid。我可以从中找出随机种子。

因此,如果您在完全相同的时间(同一秒)使用 $pid | 播种您的 UUIDv4 数字生成器。time() 跨越 100 台具有 PID 编号的机器,那么你(我猜)有 100/65536 的重复机会。这可以像这样相当容易地完成

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

安全随机:

来自 SecureRandom 的代码,尝试 openssl、/dev/urandom,然后是 win32...

当从 /dev/urandom 读取时,它是非常随机的,但是如果系统中没有足够的混乱,urandom 会编造一些东西来提供随机数据。从 /dev/random 读取时,它非常随机,如果没有足够的混乱,/dev/random 将阻塞。

UUID:

UUID gem 使用 rand()

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

对于mac地址。

UUID 也不提供 v4 UUID :)

实际上,如果我遇到 md5 或 uuid 冲突,我正在购买彩票!

于 2013-07-11T01:01:32.343 回答