0

我正在尝试使用 struct.pack 打包散列摘要,但没有得到预期的结果。

这就是我打包数据的方式:

hash = hashlib.sha256(input).digest()
print('hash = ', hash.hex())
packed = struct.pack('!32p', hash)
print('packed = ', packed.hex()) 

这是一个示例结果: hash = b5dbdb2b0a7d762fc7e429062d64b711d240e8f95f1c59fc28c28ac6677ffeaf

打包 = 1fb5dbdb2b0a7d762fc7e429062d64b711d240e8f95f1c59fc28c28ac6677ffe

字节似乎被移动了,并且添加了“1f”。这是格式说明符不正确的结果吗?

编辑:我相信这第一个字节是数据的长度,因为我使用的是“p”。有没有办法避免这种情况?我不想将其包含在我的打包数据中

4

1 回答 1

0

格式字符编码一个“Pascal 字符串”,该'p'字符串在开头包含字符串的长度。这是记录在案的。如果您不希望使用's'格式来获​​取字节本身:

packed = struct.pack('!32s', hash)
print('packed =', packed.hex())

输出:

packed = b5dbdb2b0a7d762fc7e429062d64b711d240e8f95f1c59fc28c28ac6677ffeaf
于 2020-01-17T18:00:38.947 回答