空字符串哈希和空字符哈希不一样?

问题描述 投票:0回答:1

我使用 hashlib sha256 (python) 来证明两个输入。

我的假设是空字符和空字符串将给出相同的哈希值。

这是我的代码。

from hashlib import sha256
print(sha256(b'\x00').hexdigest(),end='\n\n')
print(sha256(b'').hexdigest())

它给出了输出。

6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

为什么他们没有给出相同的结果?

与C语言字符串格式总是以null结尾有关系吗? 那么当我散列 null 时,它会散列 double null 吗?

hash
1个回答
4
投票

空字符串是(或者严格来说,“编码为”)长度为零的字节数组,不包含任何字节。您可以观察这一点,例如如下,使用Python:

>>> list(bytes("", 'ascii'))
[]

另一方面,由单个零字节组成的字符串是长度为 1 的字节数组,包含值为零的单个字节:

>>> list(bytes("\x00", 'ascii'))
[0]

因此,这两个输入是不同的,并且将散列为不同的值。

正如上面评论中提到的,与某些语言(例如 C)如何表示字符串无关,使用零字节来指示它们的结尾。

© www.soinside.com 2019 - 2024. All rights reserved.