2012-10-14 125 views
1

我有百萬符號密碼的MD5哈希和我要先999992個符號。我需要暴力破解8位數字。我可以預先安排第一個符號的散列(讓我們稱之爲基礎散列),然後只是粗暴8個字符長度的字符串,並將其散列添加到基礎散列,以使找到正確的傳遞更快?我應該使用什麼算法或什麼軟件可以幫助我?預計算MD5

+0

你在談論一個密碼,這是一個萬字的長,不是一百萬個不同的密碼,對不對? – Wyzard

+0

是的。一個包含一百萬個charachter的密碼。我知道散列和除了最後8個字符以外的所有字符,並且希望快速找到正確的密碼。 – michaeluskov

回答

2

是的,這是可能的。 MD5基於Merkle-Damgård construction,它執行塊中的散列。您可以散列許多塊,然後保存散列函數的狀態,並將其用作嘗試對其餘塊進行不同可能性的起點。

基於文檔(我沒有測試過),我覺得一個Java MessageDigest調用clone()將複製散列函數的當前狀態。您可以使用它從已知字符構建部分哈希,然後爲每個猜測創建一個克隆。假設MD5實現實際上支持克隆。有機會(取決於你使用的語言和庫)你可能必須編寫自己的MD5實現。


請注意,MD5的塊大小是512位(64個字符),密碼長度(一百萬)是整數倍。這意味着你的密碼字符將完全填滿數據的最後一個塊,散列函數將需要填充的額外塊。因此,您將預先計算您知道的前999,936個字符的部分散列,然後從剩餘的56個字符中加上您猜測的8個字符中的最後一個數據塊,然後在此之後追加填充塊。

像Java的MessageDigest的實現應該採取的將事情成塊的細節問題,但。您可以可能(再說一次,我沒有測試),只需創建一個MessageDigest,叫digest(byte[])與已知999992個字節,然後調用clone()

+0

但我沒有多少時間,我只需要暴力只有一個密碼。有沒有可以做到的程序或圖書館? – michaeluskov

+0

不是我所知道的,但我從來沒有去看過。這個網站是關於編程,而不是密碼破解,所以我正在解決你的編程問題,而不是你需要破解密碼。 – Wyzard

+0

我試圖散列999936個符號,散列64個符號(最後8位數字= 0),然後將第一個散列的每個8個字節添加到第二個散列的每個8個字節。答案並不等於完整的100萬密碼。 – michaeluskov