关于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




