【问题标题】:how do I convert Integer to 64 bit big endian integer in python如何在 python 中将整数转换为 64 位大端整数
【发布时间】:2021-10-14 03:11:21
【问题描述】:
【问题讨论】:
标签:
python
hash
endianness
sha256
【解决方案1】:
Python 3 中的 Ints 有一个名为 to_bytes() 的方法,其参数为字节长度和字节序,返回一个字节对象。
>>> num = 5
>>> print(num.to_bytes(8, 'big')) # 8 bytes aka 64 bits long, big endian
b'\x00\x00\x00\x00\x00\x00\x00\x05'
【解决方案2】:
你肯定可以用struct做到这一点:
>>> import struct
>>> val = 1234
>>> struct.pack('>Q',val)
b'\x00\x00\x00\x00\x00\x00\x04\xd2'
对于 SHA256 是否最好使用这是哲学家的问题。
【解决方案3】:
在他们的示例中,他们似乎只是使用了一个 7 位无符号二进制整数:https://qvault.io/cryptography/how-sha-2-works-step-by-step-sha-256/
在该示例中,整数 88 的位长为 7 (1011000),但是如果您仔细查看预处理步骤,您会发现它作为 64 附加到数据中位:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 01011000
获取 64 位整数长度的一种方法是 format(L,"064b"),其中 L 是原始消息的位长度。对于 88 位长度,这将返回 0000000000000000000000000000000000000000000000000000000001011000。