2011-10-12 2442 views
8

是否可以解密某些先前使用Java中的SHA-1算法加密的字符串?如何在Java中解密sha1加密的字符串

+2

SHA-1是一個散列,而不是一個加密算法。如果你試圖從它的SHA-1哈希中提取一個字符串,祝你好運。這就是所謂的圖像前攻擊。 – Mysticial

+1

它是_possible_,但需要計算資源和時間,因爲sha1加密的數據一旦加密就不會被解密。 – jsvk

+0

我認爲這個問題應該是解密sha1的計算密集程度。 Java與它有什麼關係?如果你有一個好的算法,你可以使用任何語言來編寫它。 –

回答

12

SHA1是cryptographic hash function,整個問題是您無法撤消它。如果可以顛倒散列(找到給定散列的輸入),它就沒用了。如果您需要加密某些內容並稍後將其解密,則應使用encryption function,如AESRSA

但是,對於非常簡單的輸入,可以通過猜測輸入是什麼並檢查散列是否相同來輸入crack the hash function

例Python代碼:

def crack_hash(hash_to_crack, hash_function, list_of_guesses): 
    # Try to hash everything in our guess list 
    for guess in list_of_guesses: 
     new_hash = hash_function(guess) 
     # if the hashes match, we found it 
     if new_hash == hash_to_crack: 
      return guess 
    # If none of them match, give up 
    return None 

當然,如果你真的想破解高效散列,使用軟件一樣John the RipperHashcat可能是你最好的選擇。請注意,這通常適用於密碼,因爲它們很短並且容易猜到,但隨着輸入的增加,難度將呈指數級增長。您可以在幾分鐘內破解每個帶有6個字符輸入的SHA-1哈希,而使用16個字符破解一個平均需要數萬億年。

+0

這種方法需要大量的空間和時間以及合理大小的列表。更實際的選擇是利用[彩虹表](http://en.wikipedia.org/wiki/Rainbow_table)來應用時間記憶折衷。這種方法對於鹽漬散列沒用,儘管 – jsvk

+0

@jsvk--我不是說這是個好主意。事實上,我希望這個例子能說明這是多麼毫無意義,除非你有一個好主意來猜測。它可以得到改進,但實際上,沒有人使用他們自己的密碼破解程序 - 當然不是用Python編寫的;) –

2

不,這是不可能的,因爲SHA-1是一個散列 - 它是單向票證。如果你想隱藏和解密一個字符串,那麼你需要使用一些使用密鑰來生成加密數據的加密算法。然後你可以加密數據,並在成功解密之後。例如AES。你可以從here

2

閱讀關於AES的簡短回答:這是不可能的。

由於SHA-1是一個cryptographic hash function,根據鴿巢原理,在數學上不可能逆轉。只有2 可能的SHA-1散列。由於有無限數量的可能輸入字符串,因此必須有衝突(多個輸入散列爲相同的值)。一般來說,您無法知道哪些字符串是原始輸入。

但是,真實世界的字符串並不完全是任意的。如果您知道一些關於您的輸入字符串的信息(例如,它的長度小於5個字符),則很有可能輸入是唯一的。不幸的是,像SHA-1這樣的散列函數有意在計算上不可逆轉。 (對SHA-1有理論上的攻擊,但我認爲目前還沒有任何可行的解決方案。)

所以如果你需要恢復散列數據,你必須使用暴力破解:嘗試使用SHA-1ing字符串長度小於n,並查看散列是否匹配。但是,成倍增長的字符串長度高達n,所以這很快就變得不可行。

有一種可能的方法來在宇宙結束之前恢復散列數據。你唯一的希望是使用更復雜的方法,如rainbow tables。這將只有工作,如果你知道你的原始字符串很短(少於15個字符)。即使對於短字符串,也需要很長時間(和千兆字節的磁盤空間)來預先計算表。

+0

請更新:這很可能,我只需要算法。 [sha1解密器](http://www.stringfunction.com/sha1-decrypter.html)是鏈接到您可以找到在線解密器頁面的鏈接 –

+2

@VineetVerma:這不是解密器;這是一個反向查找。它使用的代碼本質上是:Map lookup = new HashMap ();/*添加一些常用輸入* /;返回lookup.get(sha1sum);'。只有當他們碰巧將你正在尋找的輸入添加到地圖上時,它纔會起作用。 –