0

我正在使用 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

当我生成一个“交易”时,它会做工作证明,同时将它加一,看看哈希是否以 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"])

编辑:
输入值都被转换为字符串。sender、msg 和 signature 是字节,其中 nonce 是整数,timestamp 是浮点数。

4

1 回答 1

1

解决方案:我自己发现了。随机数稍后会增加。如果我想找出我需要将随机数减一的哈希值,那么它就会匹配。我的错。简单地说self.nonce += 1,在计算哈希之前

于 2019-01-16T19:03:27.633 回答