我正在开发一个执行大量散列的程序,并且在其中一个步骤中,我获取了hashlib的ripemd160哈希的结果并将其转换为整数。这些线是:
ripe_fruit = new('ripemd160', sha256(key.to_der()).digest())
key_hash160 = struct.unpack("<Q", ripe_fruit.digest())[0]
它给了我错误:
struct.error: unpack requires a buffer of 8 bytes
我尝试将值更改为L和其他东西,但它们不起作用。我该如何解决?
RIPEMD-160返回160位或20个字节。 struct
不知道如何解包大于8字节的整数。你有两个选择,正确的选择取决于你想要做什么。
key_hash160 = struct.unpack("<Q", ripe_fruit.digest()[:8])[0]
<
的小端,您可以执行以下操作:
key_parts = struct.unpack("B" * 20, ripe_fruit.digest())
key_hash160 = 0
for b in key_parts[::-1]:
key_hash160 <<= 8
key_hash160 |= b