随机数密码破解

2016-02-29  本文已影响1341人  hjrself

起因

当然不是什么新发现。。。

事情的起因是,一个同学在朋友圈发表了一个状态,表示他因忘记旅行箱密码而暴力破解,尝试300次后成功破解。

回复区里大家对他的密码到底是什么展开了讨论,有人认为他从000开始尝试,300次后应该密码是299。也有人认为300是个粗略的估计,可能是300多也可能是280+。

我比较认同300是一个粗略估计的说法,但事实上人在暴力破解自己的密码时,往往会优先尝试自己常用的组合形式而非从000一直干到999。

在这个前提之下,也就没有必要真的去研究这位朋友的密码到底是多少了,但是这反倒让我更有兴趣去了解一下暴力破解密码的技巧。比如说,这个密码箱的密码你是不知道的,而其主人不是一个随随便便将自己生日或者000作为密码的人,那么如果你采用每次用一个均匀分布随机数来破解密码,300次可以破解的概率是多少呢?

问题更加直观的表达是,口袋里有1000个均质小球,外观质量相同,一个是黑色球,999个白色球,每次取出一个,300次取出黑色球的概率是多少。

这里我故意含糊其辞,原因是这样的,这个问题可以是“A:300次以内取出黑色小球的概率”,也可以是“B:在第300次时取出黑色小球的概率”。

A与B是两种不同的概率问题,虽然同属古典概率模型,但计算方法不同,下面逐一分析。

A问题

A问题的计算方法可采用集合进行计算,即全集是“1000个球中取300个”,关注的子集为“300个球中,包含所有1个黑球中的1个黑球和999个白球中的299个白球”,所以MATLAB计算这个问题:

p=nchoosek(1,1)*nchoosek(999,299)/nchoosek(1000,300);

结果是0.3

B问题

B问题就不同了,它指的是刚好在第300次抽中,这就意味着要经历299次失败之后才能抽中,MATLAB的解答是:

N=1000;

p=1;

for i=1:299

    p=p*(1-1/N);

    N=N-1;

end

p=p/N;

结果是0.001

结论

有趣的是,绕了一大圈发现第300次抽中黑球和第一次抽中黑球概率是相同的,是不是很有意思!然而这个问题早已被人发现,就像抓阄一样,第一个抓的人和第一百个抓的抓到奖品的概率实际上是相同的。

而A问题的结论则表明,这个概率就是等于300/1000,绕了一圈也白绕了。也就是说实验的次数与成功概率成正比例。

上一篇下一篇

猜你喜欢

热点阅读