我使用 hashlib sha256 (python) 来证明两个输入。
我的假设是空字符和空字符串将给出相同的哈希值。
这是我的代码
from hashlib import sha256
print(sha256(b'\x00').hexdigest(),end='\n\n')
print(sha256(b'').hexdigest())
Run Code Online (Sandbox Code Playgroud)
它给出了输出
6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Run Code Online (Sandbox Code Playgroud)
为什么他们没有给出相同的结果?
与C语言字符串格式总是以null结尾有关系吗?那么当我散列 null 时,它会散列 double null 吗?
小智 4
空字符串是(或者严格来说,“编码为”)长度为零的字节数组,不包含任何字节。您可以使用 Python 观察这一点,如下所示:
>>> list(bytes("", 'ascii'))
[]
Run Code Online (Sandbox Code Playgroud)
另一方面,由单个零字节组成的字符串是长度为 1 的字节数组,包含值为零的单个字节:
>>> list(bytes("\x00", 'ascii'))
[0]
Run Code Online (Sandbox Code Playgroud)
因此,这两个输入是不同的,并且将散列为不同的值。
正如上面的评论中提到的,与某些语言(例如 C)如何表示字符串无关,使用零字节来指示它们的结尾。
| 归档时间: |
|
| 查看次数: |
1533 次 |
| 最近记录: |