<p>暴力是你的朋友</p>
<p>人们可能认为“机器学习”是一颗银弹,但是,学什么呢?尤其是在信息不多的情况下。你能优化什么?你的描述听起来像是一种纯粹的暴力<a href="https://en.wikipedia.org/wiki/Dictionary_attack" rel="nofollow noreferrer">dictionary based password cracking</a>,而生活在今天的黑客正是<a href="https://github.com/hashcat/hashcat" rel="nofollow noreferrer">utilizing the power of GPU</a>。你知道吗</p>
<p>这可能有点离题,但即使有一个GPU的搜索可能很难。如果您不受特定语言/平台的限制,那么上面的hashcat链接很有用。著名的<a href="https://github.com/brannondorsey/naive-hashcat/" rel="nofollow noreferrer">133 MB dictionary</a>可以在MacBookPro上5分钟内枚举,这比Python中的猜测功能强大得多。你知道吗</p>
<p><strong>搜索空间和字型</p>
<p>另外,<a href="http://www.ravi.io/language-word-lengths" rel="nofollow noreferrer">average length for English words</a>大约是8,这种情况与典型的密码非常相似。i、 你的搜索空间很大-上界是<strong>26^8=208827064576个单词!</strong>-除了玩家在游戏中只能使用有限的单词列表。你知道吗</p>
<p>实际的搜索空间可能会小一点,因为在英语单词中有一些模式(比如<code>s</code>是最常见的字母表,<code>ae</code>,<code>as</code>可能比<code>az</code>事物出现得更频繁),但是您使用的是词典,所以我认为这没有帮助。你知道吗</p>
<p><strong>非字典方法</p>
<p>另一个想法是,这个过程可以非常接近于恢复一个DNA序列,它也有一些模式,但给出的信息可能会有所不同。把它当作一个<a href="https://stackoverflow.com/questions/2294915/what-algorithm-gives-suggestions-in-a-spell-checker">word suggestion</a>。生物信息学利用DNA序列中的概率模式来计算<a href="https://en.wikipedia.org/wiki/Imputation_(genetics)" rel="nofollow noreferrer">imputation</a>。你知道吗</p>
<p>当您可以逐步猜单词/顺序时,此方法会有所帮助。否则,您只能使用暴力方法(当您的单词只能从哈希中恢复时)。你知道吗</p>
<p>用于搜索引擎、输入法和DNA插补的经典方法是<a href="https://en.wikipedia.org/wiki/Hidden_Markov_model" rel="nofollow noreferrer">hidden markov model</a>。它根据您以前的输入猜测下一个字符,概率是使用实际单词预先计算的统计值。你知道吗</p>
<p>这可以与字典相结合,对你的建议(猜测)进行排序,并提供更准确的猜测。你知道吗</p>