假设我需要为用户生成随机用户名。所以我首先将其设置为使用函数生成的随机数。在下一种情况下,我将用户名设置为随机数+时间戳。哪种情况发生碰撞的概率更大?它甚至是可判定的吗?
编辑 请注意,我没有生成供人们使用的用户名。它只是一个占位符。
最重要的是,我没有追加时间戳。我宁愿进行添加。
进一步详细说明,取随机数为105,时间戳为106.所以用户名为211.稍后时间戳将是一个更大的数字,但仍有可能在时间戳201期间生成的随机数数字可能是10,再次成为211。
答案 0 :(得分:0)
显然,你拥有的角色越多,碰撞的可能性就越小。碰撞的几率为1 /(#OfcharsInUsername ^ #ofpossiblecharacters支持)。例如,仅使用小写字母的5个字符的密码将具有1 /(5 ^ 26)的碰撞机会。由于您要为用户名附加时间戳,因此很难发生冲突。然而,我看到3个潜在的问题。首先,您需要确保使用随机时间馈送功能,或者您将多次使用相同的用户名。第二个是如果你使用时间馈送随机数生成器,而不是同时生成两个用户名,它们将完全相同(即使你将时间追加到最后)。最后一个是如果你将时间戳附加到用户名的末尾,那么输入用户名的人会非常讨厌,因为时间戳有一堆冒号和其他与之相关的垃圾。我会提示你寻找一个不同的解决方案,产生字母和数字的混合。另一种解决方案可能是获取一定数量的随机数并使用其ascii值来连接用户名。从21到126会给你所有的大小写字母,以及数字和一些符号。此外,这将使得碰撞变得非常困难,因为它不能与另一个密码及时完美地执行。碰撞的可能性为1 /(n ^ 105),其中n是字符数。