我正在使用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
当我生成“交易”时,它将进行工作量证明,同时将其递增1,并查看哈希是否以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"])
编辑:
所有输入值都将转换为字符串。发送者,消息和签名是字节,其中nonce是整数,时间戳记是浮点数。
答案 0 :(得分:1)
解决方案:
我自己发现的。
随机数稍后会增加。
如果我想找出散列,我需要将随机数减少一,那么它就匹配了。
我的错。只需将self.nonce += 1
放在计算哈希值之前