我知道这可能听起来像是一个无意义的问题,但请听我解释...
我想知道GUID是否可以被信任生成一个100%独一无二且不可能被预测的值。
我正在为一个网站制作自己的登录系统,想知道GUID是否足够安全用于会话cookie。
如果提供关于GUID生成方式的背景信息将有助于评估答案。
感谢提供重复问题链接,然而,我的问题特定于.Net框架。
我知道这可能听起来像是一个无意义的问题,但请听我解释...
我想知道GUID是否可以被信任生成一个100%独一无二且不可能被预测的值。
我正在为一个网站制作自己的登录系统,想知道GUID是否足够安全用于会话cookie。
如果提供关于GUID生成方式的背景信息将有助于评估答案。
感谢提供重复问题链接,然而,我的问题特定于.Net框架。
没有固定长度的值可以保证100%独一无二(只要调用足够次数,忽略宇宙的结束;-p)-但它可能非常,非常,非常不可能重复。
我无法确定连续数字的可预测性,但它将是唯一的。不过,我认为最好使用System.Security.Cryptography中的随机数生成器。将一个随机数与一个单调递增的值(时间)绑定以生成您的唯一密钥,这样您就可以确保它是唯一且不可预测的。
假设System.Guid.NewGuid使用CoCreateGuid,那么它根本不是随机的。历史上,创建guid的算法是将网络适配器的MAC地址与一些其他东西(如时间)结合起来。我不确定算法是否已更改。虽然它肯定不是随机的,但保证是唯一的。
GUID(全局唯一标识符)在所有方面都是独一无二的。曾经有一些GUID0生成例程会生成连续的GUID,但这些问题出现在Win98上,并由Microsoft进行了热修复。
您应该能够信任生成的GUID是唯一的,永远不会重复或重新生成。
(编辑:话虽如此,我们都知道,如果字符串长度固定,那么字母数字字符的排列组合数是固定的。但在GUID的情况下,排列组合数是经济实惠的*。)
(*该死,那个XKCD在哪里提出“天文数字”不够大的问题?)