相关疑难解决方法(0)

System.Guid.NewGuid()是如何随机的?(拿两个)

在您开始将其标记为重复之前,请将我读出来.另一个问题是(很可能)不正确的接受答案.

我不知道.NET如何生成其GUID,可能只有微软这样做,但它很有可能只是调用CoCreateGuid().但是,该函数被记录为调用UuidCreate().并且用于创建UUID的算法已被很好地记录.

长话短说,尽管如此,似乎System.Guid.NewGuid()确实使用了版本4 UUID生成算法,因为它生成的所有GUID都符合标准(参见自己,我尝试了几百万个GUID,它们都匹配).

换句话说,除了一些已知位之外,这些GUID 几乎是随机的.

这再次提出了一个问题 - 随机如何随机的?正如每个优秀的小程序员都知道的那样,伪随机数算法只与其种子(即熵)一样随机.那么种子是UuidCreate()什么?PRNG如何重新播种?它是加密强大的,或者如果两台计算机同时意外呼叫System.Guid.NewGuid(),我可以期望相同的GUID开始倾泻吗?如果收集到足够多的顺序生成的GUID,是否可以猜测PRNG的状态?

补充:为了澄清,我想知道我可以信任的随机性因此 - 我在哪里可以使用它.那么,让我们在这里建立一个粗略的"随机性"量表:

  1. 基本随机性,以当前时间为种子.可以在纸牌中使用洗牌,但是即使没有尝试也很容易碰到碰撞.
  2. 更高级的随机性,不仅使用时间,还使用其他机器特定的种子因子.也许在系统启动时也只播种一次.这可用于在DB中生成ID,因为不太可能重复.尽管如此,它对安全性并不好,因为可以用足够的努力预测结果.
  3. 密码随机,使用设备噪声或其他先进的种子随机源.每次调用或至少经常重新播种.可用于会话ID,分发给不受信任的各方等.

我在想到是否可以将它们用作数据库ID时,以及Guid.comb算法的实现System.Guid.NewGuid()(如NHibernate的实现方式)是否有缺陷,我就来到了这个问题.

.net random guid

43
推荐指数
4
解决办法
1万
查看次数

如何生成.NET 4 GUID?

我知道这里有很多问题以及雷蒙德的优秀(通常)帖子.但是,由于创建GUID的算法明显改变,我发现很难掌握任何最新信息.在MSDN似乎试图提供尽可能少的信息成为可能.

有关如何在.NET 4中生成GUID的已知信息?改变了什么,它如何影响安全性("随机性")和完整性("唯一性")?

我感兴趣的一个特定方面:在v1中,由于涉及时间戳和计数器,似乎几乎不可能在单个机器上再次生成相同的GUID.在v4中,情况不再如此(我被告知),因此在一台机器上获得相同GUID的机会增加了

.net guid .net-4.0

43
推荐指数
2
解决办法
2万
查看次数

标签 统计

.net ×2

guid ×2

.net-4.0 ×1

random ×1