检查具有相同数据的哈希和=>总是2个不同的和

时间:2019-01-16 18:47:56

标签: python hash cryptography pycrypto pycryptodome

我正在使用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是整数,时间戳记是浮点数。

1 个答案:

答案 0 :(得分:1)

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