我正在用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"])
编辑:
所有的输入值都被转换成一个字符串。sender、msg和signature是字节,其中nonce是整数,timestamp是浮点
解决方案: 我自己发现的。 稍后将递增nonce。 如果我想找出散列,我需要将nonce减少1,那么它匹配。 我的错。只需在计算散列之前放入
self.nonce += 1
相关问题 更多 >
编程相关推荐