Path.GetRandomFileName
返回一个由11个随机字符组成的加密字符串。它由8个字符+点+ 3个字符组成,如:" b253i5vu.psf"。 char可以是小写字母或0到5之间的数字。因此可能的字符串数是32 ^ 11.
我的问题已经被问到here和here,但答案都是错误的,因为:
他们说碰撞的机会是一些X值,而实际上它取决于目录中已有多少文件。因此,例如,如果您的目录中包含使用Path.GetRandomFileName生成的100,000个文件,则碰撞的可能性高于具有1000个文件的目录。
他们没有考虑Birthday Problem。
如果可能的话,我很感激你能否以一种易于使用的方式呈现这个公式,这个方式对于没有大学水平数学知识的人来说很容易使用,或者如果你可以给出如何计算它的指示特定值(例如,如果目录有1000个文件)。
答案 0 :(得分:1)
在数学堆栈交换的人的帮助下回答我自己的问题:
要计算碰撞的概率,请使用生日问题论坛,但使用32 ^ 11而不是365.概率为:
1 - exp((-n ^ 2)/(2 * 32 ^ 11))
其中 n 是已使用Path.GetRandomFilename
生成的文件数。
您可以使用WolframAlpha等网站轻松计算概率。
例如,如果n=1000
,请将以下文本粘贴到WolframAlpha搜索框中:
1-exp((-1000^2)/(2*32^11))
哪个会给你1.38 * 10 ^( - 11)。