是否可以解密某些先前使用Java中的SHA-1算法加密的字符串?如何在Java中解密sha1加密的字符串
回答
SHA1是cryptographic hash function,整個問題是您無法撤消它。如果可以顛倒散列(找到給定散列的輸入),它就沒用了。如果您需要加密某些內容並稍後將其解密,則應使用encryption function,如AES或RSA。
但是,對於非常簡單的輸入,可以通過猜測輸入是什麼並檢查散列是否相同來輸入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 Ripper或Hashcat可能是你最好的選擇。請注意,這通常適用於密碼,因爲它們很短並且容易猜到,但隨着輸入的增加,難度將呈指數級增長。您可以在幾分鐘內破解每個帶有6個字符輸入的SHA-1哈希,而使用16個字符破解一個平均需要數萬億年。
這種方法需要大量的空間和時間以及合理大小的列表。更實際的選擇是利用[彩虹表](http://en.wikipedia.org/wiki/Rainbow_table)來應用時間記憶折衷。這種方法對於鹽漬散列沒用,儘管 – jsvk
@jsvk--我不是說這是個好主意。事實上,我希望這個例子能說明這是多麼毫無意義,除非你有一個好主意來猜測。它可以得到改進,但實際上,沒有人使用他們自己的密碼破解程序 - 當然不是用Python編寫的;) –
不,這是不可能的,因爲SHA-1是一個散列 - 它是單向票證。如果你想隱藏和解密一個字符串,那麼你需要使用一些使用密鑰來生成加密數據的加密算法。然後你可以加密數據,並在成功解密之後。例如AES。你可以從here
閱讀關於AES的簡短回答:這是不可能的。
由於SHA-1是一個cryptographic hash function,根據鴿巢原理,在數學上不可能逆轉。只有2 可能的SHA-1散列。由於有無限數量的可能輸入字符串,因此必須有衝突(多個輸入散列爲相同的值)。一般來說,您無法知道哪些字符串是原始輸入。
但是,真實世界的字符串並不完全是任意的。如果您知道一些關於您的輸入字符串的信息(例如,它的長度小於5個字符),則很有可能輸入是唯一的。不幸的是,像SHA-1這樣的散列函數有意在計算上不可逆轉。 (對SHA-1有理論上的攻擊,但我認爲目前還沒有任何可行的解決方案。)
所以如果你需要恢復散列數據,你必須使用暴力破解:嘗試使用SHA-1ing字符串長度小於n,並查看散列是否匹配。但是,成倍增長的字符串長度高達n,所以這很快就變得不可行。
有一種可能的方法來在宇宙結束之前恢復散列數據。你唯一的希望是使用更復雜的方法,如rainbow tables。這將只有工作,如果你知道你的原始字符串很短(少於15個字符)。即使對於短字符串,也需要很長時間(和千兆字節的磁盤空間)來預先計算表。
請更新:這很可能,我只需要算法。 [sha1解密器](http://www.stringfunction.com/sha1-decrypter.html)是鏈接到您可以找到在線解密器頁面的鏈接 –
@VineetVerma:這不是解密器;這是一個反向查找。它使用的代碼本質上是:Map
- 1. 如何在AES加密中加密/解密多個字符串?
- 2. 如何在使用JS加密技術加密的Java字符串中解密
- 3. 如何解密java中的加密字符串
- 4. 加密/解密字符串
- 5. 解密字符串加密
- 6. 如何解密在Delphi中加密的C#中的字符串
- 7. 在javascript中加密字符串和在java中解密
- 8. AES加密 - 如何以後解密加密的字符串?
- 9. javascript中的字符串加密和java中的解密
- 10. 在java中加密和解密字符串
- 11. 如何解密用crypt加密的PHP密碼字符串?
- 12. 如何在iOS中解密DES加密字符串?
- 13. 如何在C#中對字符串進行加密和解密#
- 14. 如何完成在android中加密和解密字符串值?
- 15. 加密密鑰和加密字符串的解密
- 16. 如何從sha1()在PHP中獲取加密字符的原始字符串?
- 17. 如何解密字符串
- 18. 加密和解密一個字符串
- 19. 加密和解密字符串
- 20. 加密/解密字符串(PHP)
- 21. 加密和解密一個字符串。
- 22. 解密SHA加密字符串
- 23. RSA字符串加密\解密
- 24. SHA1在VB.Net中的解密
- 25. Java字符串加密
- 26. Java:如何解碼使用已知密鑰在php上加密的字符串?
- 27. 僅使用java中的密碼加密對字符串字符進行加密
- 28. Java不可靠的RSA加密/解密字符串
- 29. Java和PHP之間的加密/解密字符串
- 30. 發出C++中的加密字符串並在PHP中解密
SHA-1是一個散列,而不是一個加密算法。如果你試圖從它的SHA-1哈希中提取一個字符串,祝你好運。這就是所謂的圖像前攻擊。 – Mysticial
它是_possible_,但需要計算資源和時間,因爲sha1加密的數據一旦加密就不會被解密。 – jsvk
我認爲這個問題應該是解密sha1的計算密集程度。 Java與它有什麼關係?如果你有一個好的算法,你可以使用任何語言來編寫它。 –