You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于SHA256哈希字符串长度的疑问:为何实际输出为64位字符而非预期32位?

为什么SHA256哈希的hexdigest输出是64个字符而非32个?

嘿,这个问题其实是对哈希输出格式的小误解,咱们一步步理清楚:

  • 首先你说的没错:SHA256算法生成的原始哈希值确实是**256位(32字节)**的二进制数据,这部分你的计算完全正确。
  • 但你用的hexdigest()方法,作用是把二进制哈希转换成十六进制字符串。这里的关键是:十六进制的每一个字符对应4位二进制数,所以一个8位的字节(也就是1个原始哈希单位)需要用两个十六进制字符来表示(4位+4位=8位)。
  • 算一下就明白了:32字节 × 2个十六进制字符/字节 = 64个字符,这正好是你看到的输出长度。

如果想要获取原始的32字节二进制哈希数据,你可以改用digest()方法,比如执行:

print(hashlib.sha256('lsd'.encode()).digest())

得到的会是一个长度为32的bytes对象,这就是你最初预期的32个“单位”的哈希结果啦。

举个简单的小例子:假设某个字节的二进制是11111101,转换成十六进制就是fd——两个字符,这样是不是就直观多了?

内容的提问来源于stack exchange,提问作者Alireza Arbabi

火山引擎 最新活动