美文网首页
随机数密码破解

随机数密码破解

作者: hjrself | 来源:发表于2016-02-29 13:54 被阅读1341次

    起因

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

    事情的起因是,一个同学在朋友圈发表了一个状态,表示他因忘记旅行箱密码而暴力破解,尝试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,绕了一圈也白绕了。也就是说实验的次数与成功概率成正比例。

    相关文章

      网友评论

          本文标题:随机数密码破解

          本文链接:https://www.haomeiwen.com/subject/kysgkttx.html