Python中使用sha256哈希空字符串与null字符结果为何不同
哈希结果差异原因说明
- 二者哈希结果不同的核心原因是输入本身就是完全不同的字节序列:
- 空字符串
b''长度为0,不包含任何字节内容 - 单个null字符
b'\x00'长度为1,包含一个值为0x00的有效字节
- 空字符串
- 该差异和C语言字符串以null结尾的规则完全无关,也不存在处理双null的情况:
Python的bytes类型自带长度属性,hashlib处理输入时会严格按照输入的实际字节数和内容计算,不会额外追加或忽略null字符,你传入的b'\x00'就是仅处理1个null字节,没有额外附加内容。 - SHA-256算法本身的计算规则也决定了二者不可能得到相同哈希:SHA系列算法在最终填充步骤中会写入输入的精确长度信息,即使输入内容前缀一致,只要长度不同,最终计算的哈希结果也会不同,更何况这两个输入的内容和长度都不相同。
内容的提问来源于stack exchange,提问作者Muhammad Ikhwan Perwira
相关产品推荐
相关产品推荐

