我正在尝试使用struct.pack来打包哈希问题,但没有得到预期的结果。
这就是我打包数据的方式:
hash = hashlib.sha256(input).digest()
print('hash = ', hash.hex())
packed = struct.pack('!32p', hash)
print('packed = ', packed.hex())
下面是一个示例结果: 哈希 = b5dbdb2b0a7d762fc7e429062d64b711d240e8f95f1c59fc28c28ac6677ffeaf
包装 = 1fb5dbdb2b0a7d762fc7e429062d64b711d240e8f95f1c59fc28c28ac6677ffe
字节似乎已移动,并且已添加"1f"。这是格式说明符不正确的结果吗?
编辑:我相信第一个字节是数据的长度,因为我使用的是"p"。有什么办法可以避免这种情况吗?我不想在我的打包数据中包含它
'p'
格式字符编码一个"Pascal字符串",其中包括字符串开头的长度。这是有记录的。如果您不希望这样做,请使用's'
格式来仅获取字节本身:
packed = struct.pack('!32s', hash)
print('packed =', packed.hex())
输出:
packed = b5dbdb2b0a7d762fc7e429062d64b711d240e8f95f1c59fc28c28ac6677ffeaf