Проверка хеш-сумм с одинаковыми данными => Всегда 2 разные суммы - PullRequest
0 голосов
/ 16 января 2019

Я работаю над системой Proof-of-Work в Python.
Для генерации хеш-значения я использую эту функцию

from Cryptodome.Hash import SHA256

def blockhash(sender, msg, signature, nonce, timestamp):
    h = SHA256.new()
    hash_str = str(sender) + str(msg) + str(signature) + str(nonce) + str(timestamp)
    h.update(hash_str.encode())
    finalhash = h.hexdigest()
    return finalhash

Когда я генерирую «транзакцию», она выполняет Proof-of-Work, увеличивая ее на единицу и проверяя, начинается ли хэш с 4 нулей.

        while finalhash[:4] != "0000":
            finalhash = blockhash(self.sender, self.msg, self.signature, self.nonce, self.timestamp)
            self.nonce += 1
            print(str(self.nonce))
            print(finalhash)

Если транзакция начинается с двух нулей, она помещает этот файл в словарь. Этот словарь записан в текстовый файл. Когда я хочу проверить эту транзакцию и посмотреть, действительно ли значения соответствуют хешу, я всегда получаю неправильный хеш даже с теми же данными.

finalhash = blockhash(t["sender"], t["msg"], t["signature"], t["nonce"], t["timestamp"])

EDIT:
Все входные значения преобразуются в строку. sender, msg и signature - байты, где nonce - целое число, а метка времени - число с плавающей запятой.

1 Ответ

0 голосов
/ 16 января 2019

Решение: Я сам это выяснил. Одноразовый номер увеличивается позже. Если я хочу узнать хеш, который мне нужен, чтобы уменьшить одноразовый номер на единицу, то он совпадает. Виноват. Проще говоря self.nonce += 1 перед вычислением хеша

...