1

我有一百万个符号密码的 MD5 哈希,并且我有前 999,992 个符号。我需要暴力破解最后 8 位数字。我可以预先计算第一个符号的散列(我们称之为基本散列),然后只计算 8 个字符长度的字符串并将其散列添加到基本散列以更快地找到正确的传递吗?我应该使用什么算法或什么软件可以帮助我?

4

1 回答 1

2

是的,这是可能的。MD5 基于Merkle-Damgård 结构,它以块为单位执行散列。您可以散列多个块,然后保存散列函数的状态,并以此为起点尝试剩余块的不同可能性。

根据文档(我没有测试过),我认为调用clone()JavaMessageDigest会复制哈希函数的当前状态。您可以使用它从已知字符构建部分哈希,然后为每个猜测创建一个克隆。这是假设 MD5 实现实际上支持克隆。您可能需要编写自己的 MD5 实现(取决于您使用的语言和库)。


请注意,MD5 的块大小为 512 位(64 个字符),密码长度(一百万)是它的整数倍。这意味着您的密码字符将完全填满最后一个数据块,并且散列函数将需要一个额外的块来填充。因此,您将预先计算您知道的前 999,936 个字符的部分散列,然后从您知道的剩余 56 个字符加上您猜测的 8 个字符生成最终数据块,然后在之后附加填充块。

不过,像 Java 这样的实现MessageDigest应该注意将事物划分为块的细节。您可能(同样,我还没有测试过)只需创建一个MessageDigest, 调用digest(byte[])您的 999,992 个已知字节,然后调用clone().

于 2012-10-14T13:13:07.180 回答