估计暴力进展

时间:2017-12-22 15:11:56

标签: math probability brute-force

我正在使用强力算法生成哈希值,直到找到具有已定义前缀的哈希值。

例如,我正在散列随机数,直到找到以abc12开头的哈希值(哈希值为十六进制)。

我理解,对于每个哈希,成功的概率是p = (1 / (16 ^ len(prefix))

我正在努力做的是给出近似的进展,因为我不知道要使用的公式。

例如,我想说我的进度是37%,或者我会在15分钟后达到50%,或任何其他类型的有用信息

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

我想我找到了一个anwser

如果我找到解决方案的概率是256(长度为2的前缀),那么我的进展是:

1 - (255/256)^(number of attempts)

我可以通过求解N来估计我何时达到50%: 1 - (255/256)^N = 1/2

答案 1 :(得分:0)

不幸的是,没有任何有意义的衡量进展"对于这个问题。让我们做一个简单的比喻:

反复翻转硬币直到你抬头。

在1,2或3尾翻转后你的进步是什么?

根据你的答案推理,它是50%,75%和87.5%。但这并不合理,因为在每个尾巴之后we are exactly as far away from getting heads as we were when we started。它总是会让你平均多翻两次才能获得成功。

您可能会考虑计算查找具有所需前缀的哈希所需的哈希数。这只需要计算一次,因为它不会根据您过去尝试过的次数而改变。换句话说,如果你希望你需要1M哈希,那么到目前为止你是否已经尝试过0或者10M都不会改变。在任何一种情况下,你平均还需要1M以上。

预期的哈希数与成功概率的倒数相反:

E_num_hashes = 16^len_prefix