【问题标题】:how do I convert Integer to 64 bit big endian integer in python如何在 python 中将整数转换为 64 位大端整数
【发布时间】:2021-10-14 03:11:21
【问题描述】:

试图从 wiki 上的伪代码重新创建 SHA256 散列,它说要将整数转换为 64 位大端整数。

我在网上的任何地方都找不到如何做到这一点,当我查看 SHA256 工作原理的分步过程时,当它到达那部分时,对我来说没有任何意义,因为他们似乎只是在使用他们的例子中是 7 位无符号二进制整数:https://qvault.io/cryptography/how-sha-2-works-step-by-step-sha-256/

谁能帮忙?

【问题讨论】:

    标签: 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

        【讨论】:

          猜你喜欢
          • 2014-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多