假设“完全随机”,并给出一个长度为20个字符的字符串,其中每个字符可能是62个可能的字符之一:
- 总共可能有多少种组合?(将20乘以62的幂。)
- 另外,如果新的字符串是一个接一个地随机选择的,并添加到到目前为止选择的字符串列表中,那么在选择已经选择的字符串之前,必须选择多少个字符串的比例低于1到100000()?
注意: 62来自:数字(0-9),大写字母(AZ)和小写字母(az)。
假设“完全随机”,并给出一个长度为20个字符的字符串,其中每个字符可能是62个可能的字符之一:
注意: 62来自:数字(0-9),大写字母(AZ)和小写字母(az)。
Answers:
1)关闭!第一个字符有62个选择,第二个字符有62个选择,依此类推,因此最终得到,这是一个非常大的数字。
2)如上文所述,有潜在字符串。您想知道要猜测“目标”字符串的100,000几率中有多于1的可能性。本质上,您是在问要弄清楚它,您必须四舍五入x(或加一个,如果它们完全相等),但是正如您稍后会看到的那样,这并不重要。
通过基本代数,我们可以将其重新排列为
进行数学计算,约为,因此让我们将整个事情称为或更简洁地说,是很多。
当然,这就是为什么长密码确实能很好地工作的原因:-)对于真正的密码,您当然要担心长度小于或等于20的字符串,这会增加更多的可能性。
现在,让我们考虑另一种情况。字符串是随机生成的,我们想确定在两个字符串匹配的可能性为1:100,000之前可以生成多少个字符串。这个问题的经典版本称为生日问题(或“ Paradox”),询问n个人中的两个人生日相同的概率。Wikipedia文章[1]看起来不错,并且有一些表可能对您有用。不过,我也会在这里尝试提供答案。
注意事项:
-匹配和不匹配的概率之和必须为1,因此,反之亦然。
-对于两个独立事件和,的概率。
为了得到答案,我们将从计算固定数目的字符串看不到匹配的概率开始。一旦我们知道该怎么做,就可以将该方程设置为等于阈值(1 / 100,000)并求解。为了方便起见,我们将可能的字符串数()称为
我们将“遍历”列表,并计算 ^ {th}字符串与列表中“上方”的任何字符串匹配的概率。对于第一个字符串,我们总共有个字符串,并且列表中没有内容,因此。对于第二个字符串,总共仍有个可能性,但是第一个字符串已“用尽”一个可能性,因此该字符串匹配的可能性为对于第三个字符串,有两种匹配方式,因此不匹配,因此,依此类推。一般而言,第个与其他字符串不匹配的字符串为
但是,我们希望字符串中的任何一个都不匹配的可能性。由于所有事件都是独立的(针对每个问题),因此我们可以将这些概率相乘,如下所示: 可以简化一下: 第一步只是将分数相乘,第二步使用阶乘()替换以下产品
但是,对于计算阶乘和整个问题都有近似值。本文[2]建议,其中p是看不到匹配项的概率。他的测试最多可以得到,但在那里仍然相当准确。插入您的数字,我得到大约。
[1] http://en.wikipedia.org/wiki/Birthday_problem
[2] Mathis,Frank H.(1991年6月)。“一个广义的生日问题”。SIAM评论(工业和应用数学协会)33(2):265–270。JSTOR链接