2014-01-19 33 views
4

我需要破解一個SHA256散列,我知道答案是座標,但我不知道什麼是座標值 例如:當你知道答案是一個座標時,是否可以破解SHA256?

3f1c756daec9ebced7ff403acb10430659c13b328c676c4510773dc315784e4e 
58.375782 26.742632 

是否有可能創建一個python腳本,使兩個變量(都是00.000000),然後將它們添加到輸出(例如:k=i+" "+j),然後將k轉換爲sha256,並將其與sha256進行比較,我試圖破解。如果它不等於sha256被破解,那麼它會添加i值(i=i+00.000001)並重新調整。等等等等

+1

當然,你可以強制哈希。隨着時間的推移..你只需要嘗試10 ** 16個組合。 –

+0

你絕對可以自己寫出Martijn的答案,你在你的問題中描述了算法。 – Keeler

+0

該座標字符串不會產生該特定的散列摘要。什麼是座標輸入字符串的* exact *格式?在我的回答中,我假設散列函數被輸入「xx.xxxxxx yy.yyyyyyy」座標;例如用0填充格式化爲2.6位數的數字,以及兩個座標之間的空格。 –

回答

7

生產00.00000099.999999之間的所有可能的座標是很容易的:

from itertools import product 
import hashlib 

digits = '' 

for combo in product(digits, repeat=16): 
    coords = '{}.{} {}.{}'.format(
     ''.join(combo[:2]), ''.join(combo[2:8]), 
     ''.join(combo[8:10]), ''.join(combo[10:])) 
    hash = hashlib.sha256(coords).hexdigest() 
    if hash == '3f1c756daec9ebced7ff403acb10430659c13b328c676c4510773dc315784e4e': 
     print coords 
     break 

這會窮舉所有10 ** 16(一個大數目)的組合。坐下來放鬆一下,這會需要一段時間。

+2

雖然「一段時間」比「比直到宇宙熱死亡的時間更長」的時間要好得多。假設沒有並行化,我的猜測大概是幾年(最好三個月)。 – delnan

+1

也許你只能計算地球上的陸地面積的座標,以消除不必要的計算。 – flyingfoxlee

+1

雖然他們似乎是全球定位座標,所以範圍可能是[-180 .. + 180],[-90 .. + 90] –

2

有關散列的常見說法之一是它們丟棄信息,因此它們不能被顛倒。有無限的消息具有相同的散列。你無法知道哪個給出相同散列的無限消息是正確的。

當然在實踐中,暴力攻擊通常是有效的 - 要麼是因爲你的搜索策略很可能首先找到真正的原始消息(大多數散列衝突的消息在某些微不足道的方面顯然是錯誤的 - 例如錯誤的格式 - 不會因爲這個而在搜索中出現),或者因爲你的攻擊無論如何都需要使用相同散列的不同消息。

就你的情況而言,你對消息的瞭解意味着消息中的信息比散列中的(顯然)要少。當然,哈希不會創建新的信息,所以這意味着許多哈希不會出現在任何座標字符串中。你有(很有可能產生好的散列算法)可能的散列和可能的消息之間的1:1關係。原則上,你有一個可以解密的加密形式的消息。

當然,很多人會稱我爲白癡。畢竟,你仍然需要爲所有可能的消息找到所有的哈希值。這可能比一些人想象的要快,但距離微不足道還有很長的路要走。

已經指出根據你的座標格式有10^16個可能的組合。需要檢查的一點是,所有這些數字的所有值是否可能(以及同樣可能)。在內部使用浮點運算應該不是問題 - 雙精度浮點數不是8位小數,但53位尾數應該足以確保所有這些十進制數字都已完全使用。然而,可能值得檢查的是,沒有其他限制可以減少要檢查的病例數 - 顯而易見的是,如何測量這些統籌座標的精度。

即使某些數字值的可能性低於其他數字,也就是說,通過先搜索檢查更可能的值,將爲餅乾節省大量時間。

相關問題