我已经向客户发送了10000封邮件,每封邮件都有格式链接
http://example.com/LogIn?key={guid}
不幸的是,我发送的guid
是随机guids(由Guid.NewGuid()
生成的测试数据),因此客户都收到了无效链接...
根据我从网络服务器收到的404s,我发了一些guid。我已经读过windows中的guid生成器很弱,所以你可以预测你已经拥有的下一个guid。有谁知道怎么样?如果我能做到这一点,我可以使我发出的guid有效,这样链接就可以了。
答案 0 :(得分:7)
Windows生成GUID的方式已多次改变,互联网上许多看似可靠的建议完全错误(可能只是过时,可能总是完全错误)。
我最后一次研究这个问题(几年前,可能是XP SP2),我直接进入操作系统代码,看看实际发生了什么,并使用secure random number generator生成一个随机数字
如果您以默认方式生成一个GUID,我怀疑您会预测另一个GUID。
答案 1 :(得分:1)
有几种不同类型的guids。类型1使用主机ID - 通常是mac地址 - 序列号,以及当前日期和时间。类型4完全是随机的。如果它是类型1 UUID,你可能会找出一组相当有限的可能的UUID,但即便如此,你也无法生成单个UUID序列,所以你将无法确定特定用户的特定UUID。
答案 2 :(得分:1)
首先,您需要知道它们是否符合RFC4122,并且需要获取版本。
UUIDv1由以下组成:
您只需要遍历可能的时间戳。当心,那里有很多100 ns的间隔!
某些软件正在生成UUIDv1(Grafana仪表板ID,Airbnb列表等),但某些软件则依赖于随机的UUID,UUIDv4。
正如尼古拉·德涅申科(卡巴斯基)不久前所证明的那样,只要对生成UUID的进程进行调试访问,就可以窃取当前的RC4上下文并在其他地方重现500000 UUID。这已经在Microsoft Windows XP上得到了证明(嗨,Will Dean),该Windows XP使用了一种有趣的8 * RC4机制,并且每隔500000个UUID便仅植入了实际的熵。
在Windows 10(不是完全Windows版本,而是.NET框架或rpcrt4.dll版本)上,它不再是RC4,而是AES,大概是在CTR模式下使用的。大概有相同的熵重用。
有关更多信息,请检查我在那里做的工作https://uuid.pirate-server.com/blog/
答案 3 :(得分:0)
即使你可以做到这一点,预测下一个GUID也是不可靠的,但是你可以利用这些资源完全不可能。
这里最好的办法就是简单地从任何不匹配的GUID添加一个手动重定向到一个通用页面,该页面可以解释出错的地方,或者只是以编程方式确定它们应该在哪里结束并将它们发送到那里。
答案 4 :(得分:-1)
GUID的一部分是当前日期/时间。如果您碰巧按顺序接收其中两个,那么您可以判断它们的创建速度有多快,因此可以自信地预测序列。