PHP和bash返回不同的哈希结果

4

我试着用bash命令和PHP的hash()函数来生成哈希,但结果不同。我查看了之前的问题,最常见的问题是字符串中隐藏了换行符或其他字符,但我在实际字符串上运行这些函数,所以这不是问题。

例如:

Bash:

md5sum <<< hello : b1946ac92492d2347c6235b4d2611184

sha256sum <<< hello : 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03

PHP的hash()函数:

hash('md5', 'hello') : 9dd4e461268c8034f5c8564e155c67a6

hash('sha256', 'hello') : 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

我错过了什么?为什么值不同?

1个回答

9
因为md5sum在哈希之前会将您的输入附加一个换行符,因此其计算结果与Python的hashlib.md5()函数不同。
PHP等效代码如下:
echo hash('md5', "hello\n");

这将生成b1946ac92492d2347c6235b4d2611184,与原内容相同。

md5sum <<< hello

如果您想要从一个由bash生成的哈希中去除换行符,可以使用以下命令:
echo -n hello | md5sum 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接