我有一百万个符号密码的MD5哈希,我有第一个999,992个符号。我需要暴力破解最后8位数。我可以预先排序第一个符号的哈希值(让我们称之为基本哈希值),然后只刷新8个字符长度字符串并将其哈希值添加到基本哈希值以使查找正确的传递更快?我应该使用什么算法或哪些软件可以帮助我?
答案 0 :(得分:2)
是的,这是可能的。 MD5基于Merkle-Damgård construction,它以块的形式执行散列。您可以散列多个块,然后保存散列函数的状态,并将其用作起点,为剩余的块尝试不同的可能性。
基于文档(我还没有测试过),我认为在Java MessageDigest
上调用clone()
将复制哈希函数的当前状态。您可以使用它来从已知字符构建部分哈希,然后为每个猜测创建一个克隆。这是假设MD5实现实际上支持克隆。您可能需要编写自己的MD5实现,这有可能(取决于您使用的语言和库)。
请注意,MD5的块大小为512位(64个字符),密码长度(一百万)是其整数倍。这意味着您的密码字符将完全填满最后一个数据块,并且散列函数将需要附加块用于填充。因此,您将预先计算您知道的前999,936个字符的部分哈希值,然后从您知道的剩余56个字符加上您猜测的8个字符生成最终数据块,然后在此之后附加填充块。
像Java MessageDigest
这样的实现应该处理将事物划分为块的细节。您可以可能(再次,我还没有测试过)只需创建一个MessageDigest
,用您的999,992个已知字节调用digest(byte[])
,然后调用clone()
。< / p>