【问题标题】:Python: get sha256() hash digest of a single bit in PythonPython:在 Python 中获取单个位的 sha256() 哈希摘要
【发布时间】:2017-09-16 02:29:20
【问题描述】:

或者,一般来说,任何不是 8 的倍数的任意数或位。

根据hashlib.py,有一种以 SHA256 命名的构造方法。然后我使用 sha256() 创建一个 SHA256 哈希对象。我现在可以使用 update() 方法为这个对象提供任意字符串,并且在任何时候我都可以使用 digest() 或 hexdigest() 方法向它询问迄今为止提供给它的字符串的串联摘要。

嗯。我想根据此链接"What is the SHA-256 hash of a single '1' bit?" 向 SHA256 提供 1 位

当然是在 Python 2.7 中。

那么,散列由位“1”组成的 1 位长输入的过程是什么? (不是 8 位长字节 [] { 1 } 输入)?

【问题讨论】:

  • 是的,但是填充是根据输入的比特长度完成的。还有其他语言的示例,[RFC 4634][2] 的 [第 8 节][1] 中有可用的 C 代码来计算不一定是 8 位的倍数的数据的哈希值。查看名称为SHA*FinalBits(...) 的方法。 [1]:tools.ietf.org/html/rfc4634#section-8 [2]:tools.ietf.org/html/rfc4634
  • 是的,但是 Python 中没有 1 位类型
  • 当然有,叫做布尔值。
  • @allo:想演示一下吗?
  • @DIUUSIULIUS 这听起来像是XY problem 的开始。您是想实现一些特定的目标,还是只是出于好奇?大多数现实世界的协议要么填充数字,要么对任意长度的整数使用特定的编码并对其进行哈希处理(如 BER)。

标签: python hash sha256


【解决方案1】:

hashlib API 和底层 C 模块都不支持“字节缓冲区”以外的任何内容。

由于 SHA 标准规定向 any 消息添加一些内容,无论长度如何,您甚至无法在 python 中“预先填充”您的输入来绕过该限制。

演示(取自https://www.rfc-editor.org/rfc/rfc4634#section-4.1):

>>> sha256('abcde').hexdigest()
'36bbe50ed96841d10443bcb670d6554f0a34b761be67ec9c4a8ad2c0c44ca42c'

>>> sha256('abcde\x80' + 57*'\x00' + '\x28').hexdigest()
'45cb103e6385e1330c892d1566d4d82f0c1c256947e54206704973c6c2adf4f6'

虽然在技术上可能允许计算长度不是 8 倍数的消息的哈希值,但我非常怀疑是否存在用于此的实际用例(仅需要使用 python 标准库) ,不少于)。

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2017-08-06
    • 2020-02-06
    • 2020-12-21
    • 1970-01-01
    相关资源
    最近更新 更多