2014-12-25 145 views
1

我試着去重現如下:雙哈希SHA256

=============================== ========== 從Bitcoin維基

交易益智

交易 '...' 是一個有趣的謎題。

given hash = 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000 

要花錢,你需要拿出一些數據,以便散列數據結果兩次在給定的哈希交易。所需的數據恰好是Genesis塊,並且給定的散列是發生塊散列

=========================== ===============

成因= '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f'

下面的函數doublehashes輸入(它適用於步驟14中this example

def function(input): 
    data = input.decode('hex_codec') 
    result = binascii.hexlify(hashlib.sha256(hashlib.sha256(data).digest()).digest()) 
    print result 

但輸入生成哈希,它會產生以下結果:

字符串: 「ae253ca2a54debcac7ecf414f6734f48c56421a08bb59182ff9f39a6fffdb588」

己烷: 「61 65 32 35 33 63 61 32 61 35 34 64 65 62 63 61 63 37 65 63 66 34 31 34 66 36 37 33 34 66 34 38 63 35 36 34 32 31 61 30 38 62 62 35 39 31 38 32 66 66 39 66 33 39 61 36 66 66 66 64 62 35 38 38 0d 0a「

我明顯做錯了事,似乎無法弄清楚什麼。


解答:正如Falsaltru提到;

之前使用所需的散列來計算塊衝突,因此散列本身爲什麼'不難找到'。

+0

對不起,OP已經得到解決。但這並沒有引起isseu問題。 – Loops

回答

1

您可以通過反轉genesis(字節)得到了給定的哈希:

>>> import binascii                    
>>> genesis = '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f' 
>>> given_hash = '6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000' 
>>> binascii.unhexlify(given_hash) == binascii.unhexlify(genesis)[::-1] 
True 
+0

優秀!非常感謝你。 – Loops