解压 ripemd160 结果 python
Unpacking ripemd160 result in python
我正在开发一个执行大量散列的程序,在其中一个步骤中,我采用 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 returns 160 位,或 20 个字节。 struct
不知道如何解压大于 8 字节的整数。您有两种选择,正确的一种取决于您要做什么。
如果您的算法只查找散列的某些字节,您可以获取前 8 个字节或后 8 个字节并将其解压缩。
key_hash160 = struct.unpack("<Q", ripe_fruit.digest()[:8])[0]
如果您需要一个 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
我正在开发一个执行大量散列的程序,在其中一个步骤中,我采用 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 returns 160 位,或 20 个字节。 struct
不知道如何解压大于 8 字节的整数。您有两种选择,正确的一种取决于您要做什么。
如果您的算法只查找散列的某些字节,您可以获取前 8 个字节或后 8 个字节并将其解压缩。
key_hash160 = struct.unpack("<Q", ripe_fruit.digest()[:8])[0]
如果您需要一个 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