php(和python)的哈希函数与我的系统不同是有原因的吗?

quo*_*tor 2 php python linux hash

可能重复:
为什么Python创建的MD5哈希值与在外壳中使用echo和md5sum创建的哈希值不同?

我只是看到了,却不明白。我不了解php的内部知识吗?还是我正在假设...某事?那不成立吗?

$ sha512sum <(echo 'hello')
e7c22b994c59d9cf2b48e549b1e24666636045930d3da7c1acb299d1c3b7f931f94aae41edda2c2b207a36e10f8bcb8d45223e54878f5b316e7ce3b6bc019629  /proc/self/fd/11
Run Code Online (Sandbox Code Playgroud)

并且:

$ echo 'hello' | sha512sum
e7c22b994c59d9cf2b48e549b1e24666636045930d3da7c1acb299d1c3b7f931f94aae41edda2c2b207a36e10f8bcb8d45223e54878f5b316e7ce3b6bc019629  -
Run Code Online (Sandbox Code Playgroud)

但是之后:

php -a
Interactive shell
php > echo hash('sha512', 'hello');
9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043

? cat hashtest.php 
<?php
echo hash('sha512', 'hello');
?>
? php hashtest.php 
9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?我在Linux x86_64上,我的系统文本编码为utf-8,并且这些都是ascii范围字符。我不知道我在忽略什么。

有趣的是,对于“有趣”的某些价值,Python同意PHP:

>>> hashlib.sha512(b'hello').hexdigest()
'9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043'
Run Code Online (Sandbox Code Playgroud)

老实说,尽管我谦虚地开了门,但我仍认为这是某种巨大且未知的PHP错误。但我想不是。

dec*_*eze 5

$ php -a
Interactive shell

php > echo hash('sha512', "hello\n");
e7c22b994c59d9cf2b48e549b1e24666636045930d3da7c1acb299d1c3b7f931f94aae41edda2c2b207a36e10f8bcb8d45223e54878f5b316e7ce3b6bc019629
Run Code Online (Sandbox Code Playgroud)

标准echo命令包括尾随换行符。尝试echo -n相同的结果。