解压缩ripemd160导致python

问题描述 投票:1回答:1

我正在开发一个执行大量散列的程序,并且在其中一个步骤中,我获取了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和其他东西,但它们不起作用。我该如何解决?

python struct hash unpack ripemd
1个回答
0
投票

RIPEMD-160返回160位或20个字节。 struct不知道如何解包大于8字节的整数。你有两个选择,正确的选择取决于你想要做什么。

  1. 如果您的算法只查找散列的某些字节,则可以取第一个或最后8个字节并解压缩。 key_hash160 = struct.unpack("<Q", ripe_fruit.digest()[:8])[0]
  2. 如果您需要一个160字节的整数,首先必须决定它的表示方式。它是小端或大端还是介于两者之间?然后,您可以将数组拆分为20个字节的字节,然后从中计算一个数字。假设在您的问题中基于<的小端,您可以执行以下操作: key_parts = struct.unpack("B" * 20, ripe_fruit.digest()) key_hash160 = 0 for b in key_parts[::-1]: key_hash160 <<= 8 key_hash160 |= b
© www.soinside.com 2019 - 2024. All rights reserved.